PAT乙级1073-----多选题常见计分法 (20分)
Posted a982961222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1073-----多选题常见计分法 (20分)相关的知识,希望对你有一定的参考价值。
1073 多选题常见计分法 (20分)
思路:
1.错选的和未选的都计入错误信息
2.错误信息的输出应该是 MAX某道题某选项的错误次数+题号+选项
首次通过代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 typedef struct answer{ 6 int s_sum; 7 int r_s_sum; 8 int score; 9 int w_sum; 10 int right_answer[6]; 11 int wrong_answer[6]; 12 }answer,*a; 13 14 int main(){ 15 int student_sum; 16 int answer_sum; 17 scanf("%d %d",&student_sum,&answer_sum); 18 a answer_list[101]={NULL}; 19 for(int i=0;i<answer_sum;i++){ 20 a a1=(a)malloc(sizeof(answer));a1->w_sum=0; 21 for(int j=0;j<6;j++){ 22 a1->right_answer[j]=0; 23 a1->wrong_answer[j]=0; 24 } 25 scanf("%d %d %d",&a1->score,&a1->s_sum,&a1->r_s_sum); 26 for(int j=0;j<a1->r_s_sum;j++){ 27 char k[2]; 28 scanf("%s",k); 29 a1->right_answer[k[0]-‘a‘]=1; 30 } 31 answer_list[i]=a1; 32 } 33 getchar(); 34 int all_right=0; 35 for(int i=0;i<student_sum;i++){ 36 char input[1000];double s_score=0;int flag=1; 37 gets(input); 38 int counter=0;int j=0; 39 while(1){ 40 int k=input[j]-‘0‘; 41 if(k>=0&&k<=9) { 42 int c1=0,c2=0;int flag1=1; 43 while(1){ 44 int k=input[++j]-‘a‘; 45 if(k>=0&&k<=9){ 46 if(answer_list[counter]->right_answer[k]==1) { 47 c1++; 48 answer_list[counter]->wrong_answer[k]++; 49 } 50 else {answer_list[counter]->wrong_answer[k]++; 51 flag=0; 52 if(flag1){ 53 flag1=0; 54 answer_list[counter]->w_sum++; 55 } 56 c2++;} 57 } 58 else if(input[j]==‘)‘||input[j]==‘