1058 选择题(JAVA)

妖狐艹你老母 2023-09-28 19:04 141阅读 0赞

批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

输入格式:

输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (选中的选项个数 选项1 ……),按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从 1 开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple

输入样例:

  1. 3 4
  2. 3 4 2 a c
  3. 2 5 1 b
  4. 5 3 2 b c
  5. 1 5 4 a b d e
  6. (2 a c) (2 b d) (2 a c) (3 a b e)
  7. (2 a c) (1 b) (2 a b) (4 a b d e)
  8. (2 b d) (1 e) (2 b c) (4 a b c d)

输出样例:

  1. 3
  2. 6
  3. 5
  4. 2 2 3 4

代码实现:

  1. import java.util.*;
  2. import java.io.*;
  3. public class Main {
  4. public static void main(String[] args) throws Exception{
  5. PrintWriter out=new PrintWriter(System.out);
  6. BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
  7. String []strs=bf.readLine().split(" ");
  8. int N=Integer.parseInt(strs[0]);//学生数
  9. int M=Integer.parseInt(strs[1]);//题目数
  10. List<Test>list=new ArrayList<>();//存储题目
  11. for(int i=0;i<M;++i){
  12. String cur=bf.readLine();
  13. Test t=new Test();
  14. int grade=cur.charAt(0)-'0';//分数
  15. t.grade=grade;
  16. String token=cur.substring(4);//正确符号(非答案)
  17. t.correctToken=token;
  18. list.add(t);
  19. }
  20. int []a=new int[M];//记录错题
  21. for(int i=0;i<N;++i){
  22. int testCount=0;//记录题号
  23. String cur=bf.readLine();
  24. int stGrade=0;//学生分数
  25. int j=0,k=1;
  26. for(;j<cur.length();++j){
  27. while(k<cur.length()&&cur.charAt(k)!=')')
  28. ++k;
  29. String stCur=cur.substring(j+1,k);//取出两个括号间的字符串
  30. if(stCur.equals(list.get(testCount).correctToken))
  31. stGrade+=list.get(testCount).grade;
  32. else
  33. a[testCount]++;
  34. j=k+1;
  35. ++k;
  36. testCount++;
  37. }
  38. out.println(stGrade);
  39. }
  40. //处理错误题目和次数
  41. int max=0;
  42. for(int i=0;i<a.length;++i){
  43. if(a[i]>max)
  44. max=a[i];
  45. }
  46. if(max==0)
  47. out.println("Too simple");
  48. else{
  49. out.print(max+" ");
  50. boolean flag=false;
  51. for(int i=0;i<a.length;++i){
  52. if(a[i]==max){
  53. if(flag)
  54. out.print(" ");
  55. out.print(i+1);
  56. flag=true;
  57. }
  58. }
  59. }
  60. out.flush();
  61. }
  62. }
  63. class Test{
  64. public int grade;
  65. public String correctToken;
  66. }

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 1058 选择题JAVA

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。 输入格式: 输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 10

    相关 1058. 选择题(20)

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分

    相关 java选择题

    1. 【题目】 假定AB为一个类,则执行 “AB ab = new AB(a,5);”语句时将自动调用该类的( )。 A.带参构造函数 B.无参构造函

    相关 java选择题

    1.【问题】JUnit主要用来完成什么 A.发送HTTP请求 B.建立TCP连接 C.集成测试 D.单元测试 【答案】D 【分析】JUnit是一个Jav