问题标题: 酷町堂:6450 考试排排序2 经验值:800 时间限制:1000毫秒 内存限制:128MB 题目描述 De**ion 在期末考试结束后,已知了学生的姓名和学号,以及他们语数英三门课的成绩,请聪明的你按照他们的总分降序排序,如果总分相同的话则按照数学分数降序排序,输出排序后所有学生的姓名。 输入描述 Input De**ion 第一行输入一个正整数n(n<=100),表示学生人数 接下来n行,每行输入一名学生的信息,包括姓名、学号、语数英分数。 输出描述 Output De**ion 输出n行学生的姓名(按总分降序排序,总分相同的按照数学分数降序排序)。 样例输入 S

0
0
已解决
佟佳航
佟佳航
资深守护
资深守护

题目链接: 酷町堂:6450

#include <bits/stdc++.h>
using namespace std;
/*
总分从高到低排序,
如果总分相同,数学分数从高到低
输出排序后所有学生的姓名
*/
struct URE{
    string name;
    int ch,ma,en,id;
    int sum(){
        return ch+ma+en;
    }
}a[105];
bool cmp(URE x,URE y){
    if(x.sum()!=y.sum()){
        return x.sum()>y.sum();
    }else if(x.ma!=y.ma){
        return x.ma>y.ma;
    }else if(x.en!=y.en){
        return x.en>y.en;
    }
    return x.id<y.id;
}
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].id>>a[i].ch>>a[i].ma>>a[i].en;
        a[i].id=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<endl;
    }
    return 0;
}

 


0
已采纳
钱思源
钱思源
高级天翼
高级天翼

你排英语成绩、id干嘛……

0
蔡辰夕
蔡辰夕
新手启示者
新手启示者

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

我要回答