#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;
}
![](https://profile-avatar.csdnimg.cn/f072dc562bc745dfb994318de7cd5923_qq_53879790.jpg!4)
PAT测试点1过不去!怎么回事
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
在分析您提供的PAT测试点1问题时,首先要确认该题目的具体要求和测试用例。由于您没有提供详细的题目描述和测试数据,我将根据代码逻辑进行推断并给出可能的问题所在及改进方案。
从代码上看,程序设计的目的是处理一个多项选择题测试的数据结构和逻辑判断。程序首先读入每道题目的得分(score)、选项数量(cnt)、正确选项个数(right_cnt)以及正确选项字符,然后处理每位考生对每个问题的选择,并计算总分和统计每道题目的错误次数。
可能存在以下潜在问题:
-
输入格式匹配不准确:
- 在循环内读取考生答案时,scanf函数调用可能无法正确匹配括号内的整数与字符。可以尝试修改为一次性读取整个字符串,然后解析字符串中的数字和字母。例如:
这里使用了scanf("%*d(%[^)])", choose);
%[^)]
来匹配非右括号的所有字符,并跳过前面的整数。
- 在循环内读取考生答案时,scanf函数调用可能无法正确匹配括号内的整数与字符。可以尝试修改为一次性读取整个字符串,然后解析字符串中的数字和字母。例如:
-
边界条件处理不当:
- 当某题没有被任何考生回答时,其
wrong
计数器不会增加。确保在适当的地方初始化或更新wrong
值。
- 当某题没有被任何考生回答时,其
-
空格或换行符处理:
- 输入中可能存在的空格或换行符需要妥善处理,以避免干扰输入的读取。你已经在部分地方加入了getchar()来读取空格或回车,但应当确保所有可能出现这类字符的地方都做了相应处理。
-
strcmp比较:
strcmp(choose, ti[j].right)
用于比较考生选择与正确答案是否一致,但这里没有考虑到顺序无关性,即如果题目规定顺序不影响正确性,那么应该先对两者进行排序再进行比较。
-
max_wrong
变量更新时机:- 确保在每次更新
ti[j].wrong
后立即检查是否需要更新max_wrong
的最大错误次数。
- 确保在每次更新
鉴于以上分析,请您仔细审查您的代码,并对照实际题目需求进行调整。同时,建议结合具体的测试用例来进行调试,以便更准确地定位问题所在。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥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仿真