首先看一下题目!

这道题目也不难,也就是一个排序的问题;并且数字不大,就不需要字符串了,直接正常比较大小就行了。
我们来总结一下这道题的思路:
首先我们就是要输入,把学生们的三个成绩输入进去;在输入的时候,我们可以顺便将他们的编号加上,并且正好将同学们的成绩的总和求出来;
然后我们用sort进行排序:第一步将成绩的和进行比较;第二步将语文成绩进行比较;第三步将学号进行比较;(需要注意的是:总成绩和语文成绩是越大越排在前面,但是在相同情况下,学号越大,越靠后);
最后进行输出(因为只要五名,所以只输出五个)。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
struct stu {
int num;
int c, m, e;
int sum;
}student[310];
bool cmp(stu a, stu b) {
if (a.sum > b.sum)return 1;
else if (a.sum < b.sum)return 0;
else {
if (a.c > b.c)return 1;
else if (a.c < b.c)return 0;
else {
if (a.num > b.num) return 0;
else return 1;
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
student[i].num = i;
cin >> student[i].c >> student[i].m >> student[i].e;
student[i].sum = student[i].c + student[i].m + student[i].e;
}
sort(student + 1, student + n + 1, cmp);
for (int i = 1; i <= 5; i++)
cout << student[i].num << " " << student[i].sum << endl;
return 0;
}
顾yh
该博客介绍了洛谷NOIP2007普及组的奖学金问题,涉及一道排序题目。博主指出问题本质是排序学生的三个成绩,通过在输入时计算总成绩,使用sort进行多重排序:先按总成绩,再按语文成绩,最后按学号。注意排序规则是总成绩和语文成绩越大越前,学号相同则后。最终输出排名前五的学生信息。
280

被折叠的 条评论
为什么被折叠?



