这里基本分为2步,读取正确的答案,读取考生的答案判断对错,最后输出。
判断可以用strcmp对比2个字符是否相同,这里建议统一用字符形式做,这样后面比较好比较。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef struct
{
int grade,num;
char f[7];
}title;
int main()
{
int N,M;
scanf("%d%d",&N,&M);
title t[M];
for(int i=0;i<M;i++)
{
int ch,k=0;
scanf("%d%d",&t[i].grade,&t[i].num);
while((ch=getchar())!='\n')
{
if(!isspace(ch))
{
t[i].f[k++]=ch;
}
}
t[i].f[k]='\0';
}
char answer[7];
int ksgrade[N],miscount[M],maxcount=0;
memset(ksgrade,0,N * sizeof(int));
memset(miscount,0,M * sizeof(int));
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
int ch,p=0;
while((ch=getchar())!=')')
{
if(isdigit(ch)||isalpha(ch))
{
answer[p++]=ch;
}
}
answer[p]='\0';
if(strcmp(answer,t[j].f))
{
miscount[j]++;
if(miscount[j]>maxcount)
{
maxcount=miscount[j];
}
}
else
{
ksgrade[i]+=t[j].grade;
}
}
}
for(int i=0;i<N;i++)
{
printf("%d\n",ksgrade[i]);
}
if(maxcount==0)
{
printf("Too simple");
}
else
{
printf("%d",maxcount);
for(int i=0;i<M;i++)
{
if(miscount[i]==maxcount)\
{
printf(" %d",i+1);
}
}
}
}