NOIP2005 提高组 复赛 scholar 谁拿了最多奖学金
1.读完题目,马上就决定用结构体了。
2.读取Y,N信息建议用字符串。
3.按部就班,很快将程序编好。
4.测试样例,有些小错误,静态检查,找到笔误,修改,样例通过,提交AC。
耗时:20分钟
难度:简单
附上AC代码:
//2005 scholar 谁拿了最多奖学金
#include <stdio.h>
struct student{
char name[20+10];
int qm_score;
int bj_score;
char gb[10];
char xb[10];
int lw;
int jj;
}stu[100+10],stu_t;
int main(){
int n;
int i,j;
int sum=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s%d%d%s%s%d",&stu[i].name,&stu[i].qm_score,&stu[i].bj_score,&stu[i].gb,&stu[i].xb,&stu[i].lw);
stu[i].jj=0;
}
for(i=0;i<n;i++){
if(stu[i].qm_score>80&&stu[i].lw>=1){
stu[i].jj+=8000;
sum+=8000;
}
if(stu[i].qm_score>85&&stu[i].bj_score>80){
stu[i].jj+=4000;
sum+=4000;
}
if(stu[i].qm_score>90){
stu[i].jj+=2000;
sum+=2000;
}
if(stu[i].qm_score>85&&stu[i].xb[0]=='Y'){
stu[i].jj+=1000;
sum+=1000;
}
if(stu[i].bj_score>80&&stu[i].gb[0]=='Y'){
stu[i].jj+=850;
sum+=850;
}
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].jj<stu[j].jj){
stu_t=stu[i];
stu[i]=stu[j];
stu[j]=stu_t;
}
printf("%s\n",stu[0].name);
printf("%d\n",stu[0].jj);
printf("%d\n",sum);
return 0;
}
再次编写此题时,竟然提交只有30分,反复读代码,就是找不出问题,也明白肯定是读题有问题,上网查找其他途径的该题题目,还是查不出,无奈,只好搁置,第二天一早,再对照题目读代码,竟然一遍找出问题所在:
班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
代码却写成了:
班级贡献奖,每人850元,期末评议成绩高于80分(>80)的学生干部均可获得;
if(stu[i].bj>80&&stu[i].gb[0]=='Y')//好难找,必须心平气和,错误代码 if(stu[i].qm>80&&stu[i].gb[0]=='Y')
马上修改,提交AC。
2017-1-20