我经常参考别人的代码,可以学到好多有用的技巧,哈哈。
比如说这个题,我把 正确选项个数和所有选项,当成一个整体(字符串实现)看待,方便比较。
比如,
题目的正确答案由,正确选项个数 2,所有选项 a b,组成的话,即 2 a b。
学生给出的答案由,选项个数 2,所有选项 a c,组成的话,即 2 a c,显然两者不一致,学生答错。。。
#include<iostream> using namespace std; int score[111] = {0},grade[1010] = {0},wrongCnt[111] = {0}; string Right[111]; int main() { int n,m,total; scanf("%d%d",&n,&m); for(int i = 1; i <= m; ++i) { scanf("%d %d ",&score[i],&total); getline(cin,Right[i]); } for(int i = 1; i <= n; ++i) { //n 个学生 for(int j = 1; j <= m; ++j) {// 当前学生做m个题目 while(getchar() != ‘(‘);//技巧,跳过所有非 ‘(’字符 string option; char c; while(scanf("%c",&c)) {//option存放(...)中的...字符 if(c == ‘)‘) break;//技巧,遇到 ‘)’字符 ,结束死循环 option += c; } if(option == Right[j])//答对 grade[i] += score[j]; else wrongCnt[j]++; } } for(int i = 1; i <= n; ++i) printf("%d\n",grade[i]); int MAX = 0; for(int i = 1; i <= m; ++i) { if(MAX < wrongCnt[i]) MAX = wrongCnt[i]; } if(MAX == 0) printf("Too simple"); else { printf("%d",MAX); for(int i = 1; i <= m; ++i) { if(MAX == wrongCnt[i]) printf(" %d",i); } } return 0; }
原文:https://www.cnblogs.com/keep23456/p/12348849.html