90分求改

P1093 [NOIP2007 普及组] 奖学金

lsd2012 @ 2025-01-11 15:03:41

#include<iostream>
#include<algorithm>
using namespace std;
struct people{
    int yuwen;
    int shuxue;
    int english;
    int zong;
    int y;
}a[1010];
bool cmp(people a,people b){
    if(a.zong==b.zong){
        if(a.yuwen==b.yuwen){
            return a.y>b.y; 
        }
        return a.yuwen>b.yuwen;
    }
    return a.zong>b.zong;
}
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].yuwen>>a[i].shuxue>>a[i].english;
        a[i].zong=a[i].yuwen+a[i].shuxue+a[i].english;
        a[i].y=i;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=5;i++){
        cout<<a[i].y<<" "<<a[i].zong<<endl;
    }
    return 0;
} 

by ZMY_123 @ 2025-01-11 15:43:17

将14行的a.y>b.y改为a.y<b.y可AC

原因: 在比较函数中,当总分和语文成绩都相同的情况下,学号应该按从小到大的顺序排列。然而,我的代码中错误地将学号大的排在前面。您应该修改比较函数,使得在总分和语文成绩都相同的情况下,学号小的排在前面。

求关


|