我为什么错了?90分

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

jiangzhencong @ 2022-11-12 17:53:26

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct stu {
    string name;
    int chinese=0,math=0,english=0;
    int sum = 0;
};
bool comp(stu a,stu b){//排序函数 
    return a.sum>b.sum;
}
int main(){
    int n;
    cin>>n;
    stu a[n+1];
    for(int i=1;i<=n;i++){//输入 
        cin>>a[i].name;
        cin>>a[i].chinese;
        cin>>a[i].math;
        cin>>a[i].english;
        a[i].sum = a[i].chinese + a[i].math +a[i].english ;
    }
    sort(a+1,a+n+1,comp);//排序 
    //输出 
    cout<<a[1].name<<" "<<a[1].chinese<<" "<<a[1].math<<" "<<a[1].english ;
    cout<<endl;
    return 0;
}

by Wf_yjqd @ 2022-11-12 18:04:50

主要题目中

如果有多个总分相同的学生,输出靠前的那位。

应该选用稳定的排序,例如 stable_sort


by Wf_yjqd @ 2022-11-12 18:05:08

@jiangzhencong


by ISTP @ 2022-11-12 18:07:31

@jiangzhencong 楼上正解,也可以在结构体里多开个存先后顺序的变量,然后在 comp 函数里多判断以下,差不多就是

bool comp(stu a,stu b){//排序函数 
    return a.sum==b.sum?a.id<b.id:a.sum>b.sum;
}

by jiangzhencong @ 2022-11-12 18:16:29

谢谢各位,懂了,马上改


by jiangzhencong @ 2022-11-12 18:28:38

已过,感谢给位,意见都很有价值,连完老师都没想到呵呵


|