{循环}[ACM校赛]失败的在线考试

题目描述

某中学举行了一场在线考试,出题人准备了甲、乙两份题目。每份题目有 n道单项选择题,每道题目有 4 个选项 A、B、C、D。由于工作人员的失误,一些同学拿到了甲题目,另一些同学拿到了乙题目,但他们的答案都被提交到了同一数据库中。目前已经无法确认每位同学拿到了哪一份题目,于是只能用甲、乙两份题目的标准答案分别比对同学们提交的答案。若一位同学的答案与甲题目的标准答案有 x 道题相同,与乙题目的标准答案有 y 道题相同,就认为他做对了 max(x, y) 道题。

请你帮助阅卷老师,确定每位同学做对的题数。

输入

输入包含多组数据,请处理到 EOF

每组数据,第一行包含一个正整数 n ,表示同学的个数。第二行包含一个字符串 u,其中第 i 个字符表示甲题目中第 i 题的标准答案。第三行包含一个字符串 v,其中第 i 个字符表示乙题目中第 i 题的标准答案。之后 n 行,第 i 行包含一个字符串 s,其中第 j 个字符表示第 i 个同学提交的第 j 题的答案。保证一组数据中输入的所有字符串长度相同。保证整个输入文件中所有字符串的总长度不超过 106。保证所有字符串非空,且只包含大写英文字母 “A”、“B”、“C”、“D”。

输出

对于每一组数据输出n行,第i行包含dii个同学做对的题数。

样例

 

注意事项&个人感想

1.处理到EOF,即结束以文件输出流End of File,则exe文件中,以输入ctrl+z结束输入。

   代码示例

    while(scanf("%d",&n)!=EOF) 

2.测试数据中,数组长度较大,若将数组定义在main函数里面,可能会导致内存溢出,编译时,直接以

    Process exited after 10.18 seconds with return value 3221225725结束输入,所以要将数组定义在main函数外面。

    代码示例

#include<stdio.h>
#include<string.h>    
char A[1000000],B[1000000],C[1000000];
int main()
{
    return 0;
}

3.对每一个字符串处理,用while循环控制输入结束,处理后可以直接输出(即一个输入一个输出),不用考虑为整块输入输出

完整代码

#include<stdio.h>
#include<string.h>    
char A[1000000],B[1000000],C[1000000];
int main()
{
    int n,J;
    int lo,ans1=0,ans2=0,i;
    
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%d",&n);
        scanf("%s",&A);
        scanf("%s",&B);
        lo=strlen(A);
        for(J=0;J<n;J++)
        {
            scanf("%s",&C);
            for(i=0;i<lo;i++)
            {
                
                if(C[i]==A[i])
                {
                ans1++;
                }
                if(C[i]==B[i])
                {
                    ans2++;
                }
            }
            if(ans1>ans2)
                printf("%d\n",ans1);
            else
                printf("%d\n",ans2);
            ans1=0,ans2=0;
        }    
        
    }
    return 0;
}

 

posted @ 2020-05-11 17:37  问夏summer  阅读(204)  评论(0)    收藏  举报