亦行之 2024-03-07 21:35 采纳率: 34.5%
浏览 0

PAT测试点1过不去!怎么回事

img


#include<stdio.h>
#include<ctype.h>//isalpha的头文件
 #include<string.h>//strcmp的头文件
struct problem{
    int score;
    int cnt;
    int right_cnt;
    char right[6];//所有正确选项存在里面 
    int wrong;
};
int main()
{
    int n,m,max_wrong=0;
    scanf("%d %d",&n,&m);
    struct problem ti[m];
    int p;
    for(p=0;p<m;p++){
        scanf("%d %d %d ",&ti[p].score ,&ti[p].cnt ,&ti[p].right_cnt );
        ti[p].wrong =0;//初始化 
        char c;
        int j=0;
        while((c=getchar())!='\n'){//妙
        //while((c=getchar())!='\n')是判断c=getchar()是否不等于换行,
        //while(c=getchar() !='\n')是将getchar() !='\n'的结果赋值给c,再判断c的值
            if(isalpha(c)){
                ti[p].right [j]=c;//存储正确选项有哪些
                j++; 
            }
        } 
        //
        ti[p].right [j]='\0';
    }
    int q;
    for(q=0;q<n;q++){
        int xxnum,grade=0,j;
         for(j=0;j<m;j++){
             scanf("(%d",&xxnum);
             char c,choose[6];//存储该人该题所选择的选项们
             int k=0;
              while((c=getchar())!=')'){
                 if(isalpha(c)){
                     choose[k]=c;
                     k++;
                 }
             } 
             //
             choose[k]='\0';
             if(xxnum==ti[j].right_cnt &&strcmp(choose,ti[j].right )==0){
                 //正确则加起来分数 
                 grade+=ti[j].score ;
             }
             else{
                 //错误记录该题的错误次数 
                 ti[j].wrong ++;
             }
             if(max_wrong<ti[j].wrong ){
                 max_wrong=ti[j].wrong ;
             }
             getchar();//读入空格! h或回车 
         }
         printf("%d\n",grade);
    }
    if(max_wrong==0){
        printf("Too Simple\n");
    }
    else{
        printf("%d",max_wrong);
        for(int i=0;i<m;i++){
            if(max_wrong==ti[i].wrong ){
                printf(" %d",i+1);//递增输出第几道题 
            }
        }
    }
    return 0;
 } 

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 21:35
    关注

    引自免费微信小程序:皆我百晓生

    在分析您提供的PAT测试点1问题时,首先要确认该题目的具体要求和测试用例。由于您没有提供详细的题目描述和测试数据,我将根据代码逻辑进行推断并给出可能的问题所在及改进方案。

    从代码上看,程序设计的目的是处理一个多项选择题测试的数据结构和逻辑判断。程序首先读入每道题目的得分(score)、选项数量(cnt)、正确选项个数(right_cnt)以及正确选项字符,然后处理每位考生对每个问题的选择,并计算总分和统计每道题目的错误次数。

    可能存在以下潜在问题:

    1. 输入格式匹配不准确

      • 在循环内读取考生答案时,scanf函数调用可能无法正确匹配括号内的整数与字符。可以尝试修改为一次性读取整个字符串,然后解析字符串中的数字和字母。例如:
        scanf("%*d(%[^)])", choose);
        
        这里使用了%[^)]来匹配非右括号的所有字符,并跳过前面的整数。
    2. 边界条件处理不当

      • 当某题没有被任何考生回答时,其wrong计数器不会增加。确保在适当的地方初始化或更新wrong值。
    3. 空格或换行符处理

      • 输入中可能存在的空格或换行符需要妥善处理,以避免干扰输入的读取。你已经在部分地方加入了getchar()来读取空格或回车,但应当确保所有可能出现这类字符的地方都做了相应处理。
    4. strcmp比较

      • strcmp(choose, ti[j].right)用于比较考生选择与正确答案是否一致,但这里没有考虑到顺序无关性,即如果题目规定顺序不影响正确性,那么应该先对两者进行排序再进行比较。
    5. max_wrong变量更新时机

      • 确保在每次更新ti[j].wrong后立即检查是否需要更新max_wrong的最大错误次数。

    鉴于以上分析,请您仔细审查您的代码,并对照实际题目需求进行调整。同时,建议结合具体的测试用例来进行调试,以便更准确地定位问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真