题目:

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。

期末,每个学生都有3门课的成绩:语文、数学、英语。

先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名学生的学号和总分。

注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。

例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279

5 279

这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。

这两名同学的总分都是279 (总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。

如果你的前两名的输出数据是:

5 279

7 279

则按输出错误处理。

输入格式:

输入文件包含n+1行:

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

第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间,第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。

每个学生的学号按照输入顺序编号为1~n (恰好是输入数据的行号减1)。

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

输出格式:

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

数据范围:

\[6≤n≤300
\]

输入样例:

  1. 6
  2. 90 67 80
  3. 87 66 91
  4. 78 89 91
  5. 88 99 77
  6. 67 89 64
  7. 78 89 98

输出样例:

  1. 6 265
  2. 4 264
  3. 3 258
  4. 2 244
  5. 1 237

题目分析:

题意清晰、主要是用到C++中运算符重载和自定义比较函数的使用。

代码:

1、运算符重载做法

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 310;
  6. int n;
  7. struct Person
  8. {
  9. int id, sum, a, b, c;
  10. bool operator< (const Person& t) const // 运算符重载
  11. {
  12. if(sum != t.sum) return sum > t.sum; // 返回sum大的
  13. if(a != t.a) return a > t.a; //返回 a大的
  14. return id < t.id; //返回id较小的
  15. }
  16. }q[N];
  17. int main()
  18. {
  19. cin >> n;
  20. for(int i = 1; i <= n ; i++)
  21. {
  22. int a, b, c;
  23. cin >> a >> b >> c;
  24. q[i] = {i, a + b + c, a, b, c};
  25. }
  26. sort(q + 1, q + n + 1);
  27. for(int i = 1; i <= 5 ; i ++)
  28. {
  29. cout << q[i].id << " " << q[i].sum << endl;
  30. }
  31. return 0;
  32. }

2、自定义比较函数

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 310;
  6. int n;
  7. struct Person
  8. {
  9. int id, sum, a, b, c;
  10. }q[N];
  11. bool cmp(Person &a, Person &b)
  12. {
  13. if(a.sum != b.sum) return a.sum > b.sum;
  14. if(a.a != b.a) return a.a > b.a;
  15. return a.id < b.id;
  16. }
  17. int main()
  18. {
  19. cin >> n;
  20. for(int i = 1; i <= n ; i++)
  21. {
  22. int a, b, c;
  23. cin >> a >> b >> c;
  24. q[i] = {i, a + b + c, a, b, c};
  25. }
  26. sort(q + 1, q + n + 1, cmp);
  27. for(int i = 1; i <= 5 ; i ++)
  28. {
  29. cout << q[i].id << " " << q[i].sum << endl;
  30. }
  31. return 0;
  32. }

AcWing429. 奖学金的更多相关文章

  1. ACM 谁获得了最高奖学金

    谁获得了最高奖学金 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述     某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: ...

  2. P1093 奖学金

    奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文 ...

  3. NOIP2007 T1奖学金 解题报告-S.B.S.

    洛谷P1093 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同, ...

  4. TYVJ P1002 谁拿了最多奖学金 Label:模拟 水

    背景 NOIP2005复赛提高组第一题 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同:1)     院士奖学金,每人8000元,期末平均成绩高于80分( ...

  5. NOIP200505谁拿了最多的奖学金

    NOIP200505谁拿了最多的奖学金 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1)      院士奖学金,每人8000元,期 ...

  6. 奖学金评分系统(系统分析与设计版与Delphi实现代码)

    一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化. ...

  7. NOIP2005 谁拿了最多奖学金

    1谁拿了最多奖学金 (scholar.pas/c/cpp) [问题描述] 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1)     院士奖学金,每人800 ...

  8. nyoj 60 谁获得了最高奖学金

    谁获得了最高奖学金 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述     某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: ...

  9. [NOIP2007]奖学金

      题目来源:http://www.luogu.org/problem/show?pid=1093# 2007年NOIP全国联赛普及组 [题目描述 Description] 某小学最近得到了一笔赞助, ...

随机推荐

  1. 洛谷 P5502 - [JSOI2015]最大公约数(区间 gcd 的性质+分治)

    洛谷题面传送门 学校模拟赛的某道题让我联想到了这道题-- 先讲一下我的野鸡做法. 首先考虑分治,对于左右端点都在 \([L,R]\) 中的区间我们将其分成三类:完全包含于 \([L,mid]\) 的区 ...

  2. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  3. 【GWAS】如何计算显著关联位点的表型解释率PVE(phenotypic variation explained)?

    我已经通过Gemma得到了关联分析的结果,如下. prefix.log.txt 中包含了一个总的PVE,这不是我们想要的. 那么,如何计算这些位点的表型解释率? 据了解,有些关联分析软件是可以同时得到 ...

  4. KEGG数据库整理示例

    已知KEGG数据库中ko_map.tab文件,K-->ko: 目标文件:map-->K 代码示例: #! /usr/bin/perl -w use strict; my %seq; ope ...

  5. SIG -MESH -1

    协议栈    node:成为蓝牙mesh网络中一员的设备被称为节点(Node). 蓝牙mesh规格定义了节点可能拥有的特性.具有这些特性中的一个或多个,即表示节点可以在网络中扮演相应的特殊角色.定义的 ...

  6. java中接口可以继承接口

    今天阅读别人的代码才发现,接口是可以继承接口的 一个类只能extends一个父类,但可以implements多个接口. 一个接口则可以同时extends多个接口,却不能implements任何接口. ...

  7. 非线性回归支持向量机——MATLAB源码

    支持向量机和神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强.大量仿真证实,支持向量机的泛化能力强于神经网络,而且能避免 ...

  8. 单元测试在Unity中的应用

    项目描述:简单演示单元测试在Unity中的应用 项目地址:UnityTestRunner_Tutorial - SouthBegonia 项目版本:2020.3.20f1 项目用法:打开就用,代码都放 ...

  9. 大数据学习day21-----spark04------1. 广播变量 2. RDD中的cache 3.RDD的checkpoint方法 4. 计算学科最受欢迎老师TopN

    1. 广播变量  1.1 补充知识(来源:https://blog.csdn.net/huashetianzu/article/details/7821674) 之所以存在reduce side jo ...

  10. 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式

    0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...