NOIP2005 提高组 复赛 scholar 谁拿了最多奖学金

来源:互联网 发布:紧急大通知狼友域名 编辑:程序博客网 时间:2024/05/16 19:20

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


0 0