PAT B1058 选择题

来源:互联网 发布:主机域名哪个是主机名 编辑:程序博客网 时间:2024/05/23 01:24

这是PAT乙级考试题库B1058题的思路:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct question{    int wnum;                    //wnum用来记录该道题目错误的次数;     int mark;                    //mark用来记录该道题目的分值;ans字符数组记录正确答案     char ans[10];}qus[110];int sum[1010]={0};int main(){    int n,m,temp1,temp2,temp3;     scanf("%d %d",&n,&m);    for(int i=1;i<=m;i++){        scanf("%d %d %d",&qus[i].mark,&temp1,&temp2);        getchar();                                         for(int j=0;j<temp2;j++){            scanf("%c",&qus[i].ans[j]);        //需要通过输入记录的值即正确答案;由于题中输入格式的限制,只能用%c字符一个一个输入;             getchar();                         //在字符串数组结尾要记得加上'\0'作为结束标志;         }        qus[i].ans[temp2]='\0';         qus[i].wnum=0;    }    for(int i=0;i<n;i++){        for(int j=1;j<=m;j++){            scanf("(%d",&temp3);char temp[10];      //输入学生的答题情况,要注意输入的格式的正确性;             for(int k=0;k<temp3;k++){                getchar();                scanf("%c",&temp[k]);               }            temp[temp3]='\0';            getchar();getchar();                    //用getchar处理输入中不必要的字符;             if(strcmp(qus[j].ans,temp)==0){         //如果该题答案正确,则加分;                 sum[i]+=qus[j].mark;                //如果不正确。则该题的wnum自增;             }            else qus[j].wnum++;           }        printf("%d\n",sum[i]);                      //在每行输出每个人的得分;     }    int max=0;    for(int j=1;j<=m;j++){        if(qus[j].wnum>max){            max=qus[j].wnum;                        //求出错误数最高的错误数max         }    }    if(max==0) printf("Too simple");            else{        printf("%d",max);        for(int j=1;j<=m;j++){           if(qus[j].wnum==max)                      //再循环一遍,输出所有错误数为max的题的题号;               printf(" %d",j);        }    }    return 0;}
0 0
原创粉丝点击