sdnu1182.奖学金

来源:互联网 发布:便笺软件 编辑:程序博客网 时间:2024/04/30 12:00

1182.奖学金
Time Limit: 1000 MS    Memory Limit: 32768 KB
Total Submission(s): 162    Accepted Submission(s): 64
Description
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 
7 279

5 279 
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 
5 279 

7 279 
则按输出错误处理,不能得分。 
Input
输入包含n+1行: 

第1行为一个正整数n(6<=n<=300),表示该校参加评选的学生人数。 

第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。 

所给的数据都是正确的,不必检验。
Output
输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。
Sample Input
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
Sample Output
6 265
4 264
3 258
2 244
1 237
Source
NOIP 2007 普及组

#include<cstdio>using namespace std;#include<algorithm>#include<iostream>#define r 301struct student{    int a,b,c,s,number;}stu[r];bool cmp(student aaa,student bbb){    if(aaa.s>bbb.s) return true;    else if(aaa.s==bbb.s&&aaa.a>bbb.a) return true;    else if(aaa.s==bbb.s&&aaa.a==bbb.a&&aaa.number<bbb.number) return true;    else return false;}int main(){    int x,i;//    int t,d;    scanf("%d",&x);    for(i=0; i<x; i++)    {        scanf("%d %d %d",&stu[i].a,&stu[i].b,&stu[i].c);        stu[i].s=stu[i].a+stu[i].b+stu[i].c;        stu[i].number=i+1;    }    sort(stu,stu+x,cmp);//    for(i=0; i<x; i++)//    {//        if(stu[i].s==stu[i+1].s)//        {//            if(stu[i].a<stu[i].a)//            {//                d=stu[i].a;//                stu[i].a=stu[i+1].a;//                stu[i+1].a=d;//            }//            if(stu[i].a==stu[i+1].a)//            {//                if(stu[i].number<stu[i+1].number)//                {//                    t=stu[i].number;//                    stu[i].number=stu[i+1].number;//                    stu[i+1].number=t;//                }//            }//        }//    }    for(i=0; i<5; i++)    {        printf("%d %d\n",stu[i].number, stu[i].s);    }    return 0;}

我是个笨蛋 要求用结构体排序。。。 我一开始不会 是用sort加冒泡排序。。。注释掉的那一部分。。。就是我犯蠢的记录。。。