原題鏈接:PAT (Basic Level) Practice (中文)1058 選擇題
做前思考
1捶枢、屬實(shí)有些麻煩的一題顷扩。
2啸澡、首先讀入多選題袖订,用getchar會(huì)好一點(diǎn)。
3嗅虏、再讀入學(xué)生選項(xiàng)的時(shí)候著角,每讀完一個(gè)括號(hào)內(nèi)的數(shù)據(jù)就與多選進(jìn)行一次比較。
做后總結(jié)
1旋恼、代碼巨長吏口,想法挺簡單的,一些變量已經(jīng)標(biāo)記好了冰更。
2产徊、后續(xù)還會(huì)改進(jìn)(感覺還能更好)。蜀细。
#include<stdio.h>
int main()
{
int n,m,i=0,j=0,k=0,x,x2,flag,max=0;//k表示比較時(shí)第幾道多選題舟铜,x表示正確的答案數(shù)
char a[100][8]={{0}},ch,b[1000][600]={{0}};
scanf("%d %d\n",&n,&m);
int num[m],sum[n];
//讀入多選題
while(i!=m)
{
ch=getchar();
if(ch=='\n')
{
num[i]=0;
j=0;
i++;
}else if(ch!=' ')
{
a[i][j]=ch;
j++;
}
}
i=0;
j=0;
sum[i]=0;
//讀入學(xué)生選項(xiàng)并比較
while(i!=n)
{
ch=getchar();
if(ch=='\n')
{
k=0;
j=0;
i++;
sum[i]=0;
}else if(ch==')')
{
if(b[i][j-(a[k][2]-'0')-1]==a[k][2])
{
x=a[k][2]-'0';
x2=3;//x2表示多選答案在數(shù)組中的位置
while(x!=0)
{
flag=0;
if(b[i][j-x]!=a[k][x2])
{
num[k]++;
flag=1;
break;
}
x2++;
x--;
}
if(flag==0)
{
sum[i]+=a[k][0]-'0';
}
}else{
num[k]++;
}
k++;
}else if(ch!=' '&&ch!='(')
{
b[i][j]=ch;
j++;
}
}
//輸出:
for(i=0;i<n;i++)
{
printf("%d\n",sum[i]);
}
for(i=0;i<m;i++)
{
if(max<num[i])
{
max=num[i];
}
}
if(max==0)
{
printf("Too simple");
}else{
printf("%d",max);
for(i=0;i<m;i++)
{
if(max==num[i])
{
printf(" %d",i+1);
}
}
}
return 0;
}