题解:P5740 【深基7.例9】最厉害的学生

· · 题解

题目传送门

题意

给定 n 个同学的姓名与成绩,找出总分最高,输入顺序最前的人的名字与每门科目的成绩。

思路

用结构体存下每个同学的信息,然后用 sort 排序,这里 cmp 函数要自己写。这题的难点在于输出输入时最靠前的人,我们可以用 id 存下每个人是第几个输入的,如果总分相同就比较谁 id 更小的。细节看代码。

代码

#include <bits/stdc++.h>
using namespace std;
int n;
struct node
{
    char name[18];
    int id, x, y, z, sum;
} a[1010];
bool cmp(node a, node b) 
{ 
    if (a.x + a.y + a.z == b.x + b.y + b.z)
        return a.id < b.id;
    return a.x + a.y + a.z > b.x + b.y + b.z; 
}
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%s%d%d%d", a[i].name, &a[i].x, &a[i].y, &a[i].z), a[i].id = i;
    sort(a + 1, a + n + 1, cmp);
    printf("%s %d %d %d", a[1].name, a[1].x, a[1].y, a[1].z);
    return 0;
}

题解来之不易,且看且珍惜。给个赞再走吧。

题目传送门