首先看一下题目!
这道题目也不难,也就是一个排序的问题;并且数字不大,就不需要字符串了,直接正常比较大小就行了。
我们来总结一下这道题的思路:
首先我们就是要输入,把学生们的三个成绩输入进去;在输入的时候,我们可以顺便将他们的编号加上,并且正好将同学们的成绩的总和求出来;
然后我们用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