1058 选择题

我经常参考别人的代码,可以学到好多有用的技巧,哈哈。

比如说这个题,我把 正确选项个数所有选项,当成一个整体(字符串实现)看待,方便比较。

比如,

题目的正确答案由,正确选项个数 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;
}

 

posted @ 2020-02-23 11:21  tangq123  阅读(152)  评论(0编辑  收藏  举报