题目描述
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。
期末,每个学生都有3门课的成绩:语文、数学、英语。
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。
算法1
运算符重载
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
using namespace std;
const int N = 320;
struct Person
{
int id, sum, a, b, c;
bool operator< (const Person& p) const
{
if(sum != p.sum) return sum > p.sum;
if(a != p.a) return a > p.a;
return id < p.id;
}
}q[N];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i)
{
int a, b, c;
cin >> a >> b >> c;
q[i] = {i, a + b + c, a, b, c};
}
sort(q + 1, q + n + 1);
for(int i = 1; i <= 5; i)
{
cout << q[i].id<< ‘ ‘ << q[i].sum << endl;
}
}