洛谷【NOIP2007 普及组】奖学金

首先看一下题目!

 

这道题目也不难,也就是一个排序的问题;并且数字不大,就不需要字符串了,直接正常比较大小就行了。

我们来总结一下这道题的思路:

首先我们就是要输入,把学生们的三个成绩输入进去;在输入的时候,我们可以顺便将他们的编号加上,并且正好将同学们的成绩的总和求出来;

然后我们用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

猜你喜欢

转载自blog.csdn.net/zjsru_Beginner/article/details/119978470