90分求改

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

Somakura @ 2024-12-02 10:49:07

#include <bits/stdc++.h>
using namespace std;
struct Stu{
    string name;
    int CN;
    int Ma;
    int En;
    int sum;
};
bool cmp(Stu a,Stu b){
    if (a.sum != b.sum) {
        return a.sum > b.sum;
    }
}
int main(){
    int n; cin >> n;
    Stu stu[n+10];
    for(int i=1;i<=n;i++){
        cin >> stu[i].name >> stu[i].CN >> stu[i].Ma >> stu[i].En;
        stu[i].sum = stu[i].CN + stu[i].Ma + stu[i].En;
    }
    sort(stu+1,stu+n+1,cmp);
    cout << stu[1].name <<" " <<stu[1].CN << " " << stu[1].Ma << " " << stu[1].En;

    return 0;
}

by Arefa @ 2024-12-02 11:39:07

当最高分相等时,应输出靠前的人。

因此,可以在 struct Stu 中加入成员变量 id,用来记录输入的顺序。

并在 cmp 函数中,当 a.sum == b.sum 返回 a.id < b.id

修改后代码:

#include <bits/stdc++.h>
using namespace std;
struct Stu{
    string name;
    int CN;
    int Ma;
    int En;
    int sum;
    int id;
};
bool cmp(Stu a,Stu b){
    if (a.sum != b.sum) {
        return a.sum > b.sum;
    }
    else return a.id < b.id;
}
int main(){
    int n; cin >> n;
    Stu stu[n+10];
    for(int i=1;i<=n;i++){
        cin >> stu[i].name >> stu[i].CN >> stu[i].Ma >> stu[i].En;
        stu[i].sum = stu[i].CN + stu[i].Ma + stu[i].En;
        stu[i].id = i;
    }
    sort(stu+1,stu+n+1,cmp);
    cout << stu[1].name <<" " <<stu[1].CN << " " << stu[1].Ma << " " << stu[1].En;

    return 0;
}

|