欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1073 多选题常见计分法 (20 分)

程序员文章站 2024-03-22 00:01:58
...

1073 多选题常见计分法 (20 )

1073 多选题常见计分法 (20 分)

1073 多选题常见计分法 (20 分)

【我的代码】

 1// 1073 多选题常见计分法 (20 分)
 2#include <iostream>
 3#include <string.h>
 4using namespace std;
 5struct Timu{
 6    double mark;
 7    int nc;
 8    int ny;
 9    int ncount[5] = {0};        //用于记录每个选项错误次数
10    int pd[5] = { 0 };
11}s[101]; 
12double judge(int a[5], int b[5], int k){
13    int count = 0;
14    int yn = 0; //0为答对,1为答错
15    for(int i = 0; i < s[k].nc; i++){
16        if(b[i] && a[i]){   //如果输入为正确,正确计数器++ 
17            count++;
18        }
19        else if (a[i] && !b[i]) {      //没有输入的正确选项
20            s[k].ncount[i]++;
21        }
22        else if (!a[i] && b[i]) {      //输入了一个错误的选项
23            s[k].ncount[i]++;
24            yn = 1;
25        }
26    }
27    if(yn) return 0;
28    else if(count != s[k].ny) return s[k].mark/2;
29    else if(count == s[k].ny) return s[k].mark; 
30}
31int main(){
32    int N, M;//学生人数和多选题个数
33    cin>>N>>M;
34    double sum;
35    char ch;
36    int t[5];        //用t记录输入的选项
37    //遍历题目 
38    for(int i = 0; i < M; i++){
39        cin>>s[i].mark>>s[i].nc>>s[i].ny;
40        for(int j = 0; j < s[i].ny;j++){
41            cin>>ch;
42            s[i].pd[ch - 'a'] = 1; 
43        }   
44    } 
45    //遍历学生
46    int k;
47    for(int i = 0;i < N; i++){
48        sum = 0;
49        for(int j = 0; j < M; j++){
50            cin>>ch>>k;
51            memset(t, 0, sizeof(t)); //重置为0
52            for(int z = 0; z < k; z++){
53                cin>>ch;
54                t[ch - 'a']++;
55            }
56            //判断得分与比对答案
57            sum += judge(s[j].pd, t, j); 
58            cin>>ch;
59        }
60        printf("%0.1lf\n", sum);
61    } 
62    int max = 0;
63    for(int i = 0; i < M; i++){
64        for(int j = 0;j < s[i].nc; j++){
65            max = s[i].ncount[j] > max ? s[i].ncount[j] : max;
66        }
67    }
68    if(max){
69        for(int i = 0; i < M; i++){
70            for(int j = 0; j < s[i].nc; j++){
71                if(s[i].ncount[j] == max){
72                    cout<<max<<" "<<i+1<<"-"<<(char) (j+'a')<<endl;
73                }
74            }
75        }
76    }
77    else{
78        cout<<"Too simple";
79    }
80    return 0;
81} 

【总结】

这题目跟前面有一题很类似,同样需要建立题目的结构体。