NOIP200701奖学金


试题描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7279

5279

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

5279

7279

则按输出错误处理,不能得分。


输入

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

所给的数据都是正确的,不必检验。


输出

共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。 

输入示例

【输入样例1】 
6      
90 67 80  
87 66 91    
78 89 91     
88 99 77     
67 89 64       
78 89 98       
【输入样例2】
8     
80 89 89     
88 98 78    
90 67 80    
87 66 91     
78 89 91     
88 99 77     
67 89 64     
78 89 98


输出示例

【输出样例1】 
6 265
4 264
3 258
2 244
1 237
【输入样例1】 
8 265
2 264
6 264
1 258
5 258

其他说明

【限制】50%的数据满足:各学生的总成绩各不相同 100%的数据满足: 6<=n<=300 
 

炒鸡简单的一道题。下面贡献两份代码

第一份:普通版

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main(int argc, char *argv[])
 6 {
 7     int n,c[305]={0},m[305]={0},e[305]={0},i,j,s[305]={0},x[305]={0};
 8     cin>>n;
 9     for(i=1;i<=n;i++)
10     {
11         cin>>c[i];
12         cin>>m[i];
13         cin>>e[i];
14         s[i]=c[i]+m[i]+e[i];
15         x[i]=i;
16         //cout<<c[i]<<" "<<m[i]<<" "<<e[i]<<" "<<s[i]<<endl;
17     }
18   for(i=1;i<n;i++)
19     {
20         for(j=i+1;j<=n;j++)
21         {
22             if(s[i]<s[j])
23             {
24                 swap(s[i],s[j]);
25                 swap(c[i],c[j]);
26                 swap(x[i],x[j]);
27             }
28            else if(s[i]==s[j])
29             {
30                 if(c[i]<c[j])
31                 {
32                     swap(s[i],s[j]);
33                     swap(c[i],c[j]);
34                     swap(x[i],x[j]);
35
36                 }
37                 else if(c[i]==c[j])
38                 {
39                     if(x[i]>=x[j])
40                     {
41                         swap(s[i],s[j]);
42                         swap(c[i],c[j]);
43                         swap(x[i],x[j]);
44                     }
45                 }
46             }
47         }
48         //cout<<x[i]<<" "<<s[i]<<endl;
49     }
50     for(i=1;i<=5;i++)
51     {
52         cout<<x[i]<<" "<<s[i]<<endl;
53     }
54     return 0;
55 }

第二份:运算符重载版。最近新学会的运算符重载,还挺方便的。

 1 #include <iostream>
 2
 3 using namespace std;
 4 struct data  //运算符重载
 5 {
 6     int num,ch,z,ma,eng;
 7     bool operator<(const data &a)const
 8     {
 9         if(z>a.z) return true;   //用原来的总分和当前比,如果大,不用交换
10         else if(z==a.z && ch>a.ch) return true;  //如果总分一样,比语文
11         else if(z==a.z && ch==a.ch && num<a.num) return true; //如果总分和语文都一样,比学号
12         else return false;
13     }
14 }a[400];
15 int main()
16 {
17     int n,i,j;
18     scanf("%d",&n);
19     for(i=1;i<=n;i++)
20     {
21         a[i].num=i;
22         scanf("%d%d%d",&a[i].ch,&a[i].ma,&a[i].eng);
23         a[i].z=a[i].ch+a[i].ma+a[i].eng;
24     }
25     sort(a+1,a+n+1);
26     for(i=1;i<=5;i++)
27     {
28         printf("%d %d\n",a[i].num,a[i].z);  //‘\n‘是回车
29     }
30     return 0;
31 }

NOIP200701奖学金(2)

时间: 01-20

NOIP200701奖学金的相关文章

NOIP200701【奖学金】

//更新的年份(是题的年份,不是更的年份)可能不一样,但连续的一般是一年的,学生党,你懂的...(···.··· 怪我调皮没用运算符重载) #include<iostream>using namespace std; //冒泡...为啥比语文成绩!!!内心是崩溃的.这道题一个同学是用语文加总分减学号做的,有兴趣的试一下,也对,楼楼就不在这赘述了int main(){ int n; cin>>n; int xuehao[301],yuwen[301],shuxue[301],ying

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇: 今天是来到无限互联的第四天,严格来说已经第六天了,刚来就是开班典礼,给人一种很好的氛围.老师讲了很多关于以后学习的技巧和规定,我的第一感觉是,比备战高考还要严格,不过这才能体现一个组织的负责任.正式开讲才感觉到这个班级的大神无处不在,不努力根本赶不上,就是这个学习氛围和高强度的练习很重要.多用心你才能感觉到有些事其实很简单.关于学习时间大家基本都是一天不动的在敲代码,等于给自己一个机会吧.时间飞逝,抓住机会才重要.刚来第一周,感受最深就是好

04:奖学金

04:奖学金 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的. 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号

【奖】51CTO学院软考班发奖学金啦(网工)

1.[晒成绩赢取奖学金] ①公布成绩10个工作日内晒出成绩截图(合格),获得[51CTO学院20金币]  方式:发博文到51CTO博客http://blog.51cto.com/  ,标题为:参加51CTO学院软考培训,我通过啦 2.[晒感想赢奖金] ①公布成绩10个工作日内晒出成绩截图(合格)+参加培训的感想(200字以上),获得[51CTO学院定制(抱枕+鼠标垫)]或[50金币] ②如果这次成绩没有合格,也不要灰心哦,你可以晒出参加培训的感想,奖励10金币 方式:发博文到51CTO博客htt

2715:谁拿了最多奖学金

描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得:2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得:3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得:4) 西部奖学金,每人1000元,期末平均成绩高于85分(>8

【水?模拟】10495 - 谁拿了最多奖学金

[水·模拟]10495 - 谁拿了最多奖学金 Time Limit: 1000MS Memory Limit: 32768KB [问题描述] 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1)     院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2)     五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得:

【奖】51CTO学院软考班发奖学金啦(中高项、监理、网工、信息安全)

1.[晒成绩赢取奖学金] ①公布成绩10个工作日内晒出成绩截图(合格),获得[51CTO学院专属T恤]或[100金币]  方式:发博文到51CTO博客http://blog.51cto.com/  ,标题为:参加51CTO学院软考培训,我通过啦 2.[晒感想赢奖金] ①公布成绩10个工作日内晒出成绩截图(合格)+参加培训的感想(200字以上),获得[51CTO学学院专属T恤]或[200金币] ②如果这次成绩没有合格,也不要灰心哦,你可以晒出参加培训的感想,奖励50金币 方式:发博文到51CTO博

谁拿了最多奖学金(2005提高组第一题)

题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得: 4) 西部奖学金,每人1000元,期末平均成绩高于85分(

洛谷1093 奖学金 解题报告

洛谷1093 奖学金 本题地址:http://www.luogu.org/problem/show?pid=1093 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的.  任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排

洛谷1051 谁拿了最多奖学金 解题报告

洛谷1051 谁拿了最多奖学金 本题地址:http://www.luogu.org/problem/show?pid=1051 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1)     院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2)     五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3)