关于PAT A1075测试点4出错

关于PAT A1075测试点4,通过我的测试,发现出错点有以下:

有些人闲的dan疼,已经获得满分他还要再输入一遍,这时要防止重复计算了完美解题数,对于我的代码修改如下:
原:

	if(score==full[Pid]){           //如果这一得分等于对应题目的满分
			stu[Uid].perfect++;
    }  
	if(score>stu[Uid].point[Pid]){    //如果新提交的题目比之前的分高,则替换
		    stu[Uid].allPoint=stu[Uid].allPoint+score-stu[Uid].point[Pid];   //计算学生总分 加上前后之差
			stu[Uid].point[Pid]=score;    //这个学生这道题的得分修正
	} 

应该只有满足当新输入成绩比之前成绩高时才判断是否完美解决,以避免重复,改为

if(score>stu[Uid].point[Pid]){    //如果新提交的题目比之前的分高,则替换
		    stu[Uid].allPoint=stu[Uid].allPoint+score-stu[Uid].point[Pid];   //计算学生总分 加上前后之差
			stu[Uid].point[Pid]=score;    //这个学生这道题的得分
			if(stu[Uid].point[Pid]==full[Pid]){
				stu[Uid].perfect++;
			}
		}

然而很遗憾,我做了这样修改后还是出错,后来发现测试点4还有一个隐藏边界情况,就是当一个人有编译过了但只得了0分,即他总分就是0分,这时候也要输出!

对于我的代码,我用了结构体中的(int)stu.flag来表示是否要输出,只需要在cmp判断中首先加上判断flag大的优先,在最后输出遍历过程中当flag等于0时候break循环结束输出就可。

经过以上两处的修改,问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值