PTA---1058 选择题(C语言+模拟)

PTA—1058 选择题

**

题目直达链接点我

**
关于这道题,就是字符处理起来有点麻烦,然后思路就按照题目所给的意思来就行了…
下面讲下这道题字符怎么读
就两点(都是输入的)

  1. 第一个就是输入答案那块,我们肯定是不能一次性都把那几个选项全部读完的,所以用一个字符变量读(不是字符串),然后它会读入空格(这是件很恼火的事)…,然后我们就需要判断是不是空格(废话),如果是就continue,这里如果使用for循环的话,增量在for表达式中,continue以后,增量是会增加的,所以不能把增量写在for里面…就是这样咯
  2. 第二个就是输入学生答案那块…那个括号伤脑筋…每次输入一道题答案括号后面有一个空格或者是回车,所以需要一个getchar()清理…
    这题大概也就这些…
    上代码

AC代码

#include <stdio.h>
struct pro
{
    int alls;                   //满分
    int sel;                    //选项数
    int corsel;                 //正确选项数
    char xx[6];                 //选项
};
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    
    struct pro a[105];
    int i,j;
    for(i=0;i<m;i++)
    {
        scanf("%d %d %d",&a[i].alls,&a[i].sel,&a[i].corsel);
        for(j=0;j<a[i].corsel;)
        {
        	char c = getchar();
        	if(c != ' ')
			a[i].xx[j++] = c;
		}
        
        a[i].xx[j] = '\0';
    }
    
    int cuoti[105] = {0};                       //错题统计
    int stu[1005] = {0};                        //学生成绩
    int max1 = 0;                            //错题最多的编号
    getchar();
    for(i=0;i<n;i++)
    {
        char c;
        int x,flag = 0,k;
    	
        for(k=0;k<m;k++)                //题目
        {
        	flag = 0;
        	scanf("(%d ",&x);
            for(j=0;j<x;)            //输入选项
            {
                c = getchar();
                if(c == ' ')
                continue;
                
                if(x != a[k].corsel)            //输入错误的个数
                    flag = 1;
                else                        //相同个数
                    if(a[k].xx[j] != c)         //不同选项
                        flag =  1;
                j++;
            }
            scanf(")");
            c = getchar();
            if(flag)
            {
                 cuoti[k]++;
                if(cuoti[k] > cuoti[max1])
                    max1 = k;
            }
            else
                stu[i] += a[k].alls;
        }
    }
    for(i=0;i<n;i++)
        printf("%d\n",stu[i]);
    
    if(cuoti[max1] == 0)
        printf("Too simple");
    else
    {
        printf("%d",cuoti[max1]);
        for(i=0;i<m;i++)
            if(cuoti[max1] == cuoti[i])
                printf(" %d",i+1);
    }
    return 0;
}

------------------------------------------------------------------------------------end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值