注意:有用的信息只有正确答案 和学生的答案 分值
- 1.将题目的分值保存在一个数组中 ,将题目正确的选项保存在一个数组中,题目号放一个数组:索引号+1为题目号
- 2.学生的答案去和正确答案比较,相等就是成绩+=arr[i] 如果错了 就是题目号i++
这道题我是卡在了对学生答案的转换,常用的方法都不行,不知道怎么拆,一时间难住了,后来看了下别人的思路,其实就是用俩个变量作为“()”的下标,然后去遍历他,一步一步的往后取,详细看我代码**。
public class Pta_1058 {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
String[] split = buf.readLine().split(" ");
int N = Integer.parseInt(split[0]);//学生人数
int M = Integer.parseInt(split[1]);//题个数
int[] titile = new int[M];//错题的次数
String[] right = new String[M];//正确答案
int[] score = new int[M];//题目的分值
int[] answer = new int[M];//学生的答案
for (int i = 0; i < M; i++) {
String s = buf.readLine();
String[] split1 = s.split(" ");
score[i] = Integer.parseInt(split1[0]);//存入分值
right[i] = s.substring(4, s.length());//存入正确答案
}
int index = 0;//题号下标
int st_score = 0;//学生分数
for (int i = 0; i < N; i++) {
String s = buf.readLine();
int j, k = 1;//"("和")"的下标
index=0;
st_score=0;
for (j = 0; j < s.length(); j++) {
while (k < s.length() && s.charAt(k) != ')') {
k++;
}
String substring = s.substring(j + 1, k);
if (substring.equals(right[index])) {
st_score+=score[index];
} else {
titile[index]++;
}
k++;
j = k;
index++;
}
System.out.println(st_score);
}
int max=0;
for (int i = 0; i <titile.length ; i++) {
if(titile[i]>max){
max=titile[i];
}
}
if(max==0){
System.out.println("Too simple");
}else{
System.out.print(max);
for (int i = 0; i <titile.length ; i++) {
if(titile[i]==max){
System.out.print(" ");
System.out.print(i+1);
}
}
}
}
}
可惜还是超时了,java的痛,,,