题解(附加每一步注释)
2024-07-13 21:29:46
发布于:上海
4阅读
0回复
0点赞
#include<iostream>
#include<algorithm>//sort函数的头文件
using namespace std;
const int N=1e5+5;
int n;
struct node{
    int id;//序号
    string name;//名字
    int a,b,c;//奖牌数量
    int sum;//记录每位选手的奖牌数量和,方便排序和输出
};//定义结构体
node t[N];//定义结构体类型的数组,存储每位选手的信息
bool cmp(node x,node y){
    if(x.sum!=y.sum) return x.sum>y.sum;//按照总奖牌数从高到低的顺序输出
    if(x.a!=y.a) return x.a>y.a;//按照金牌数量从高到低的顺序输出
    if(x.b!=y.b) return x.b>y.b;//按照银牌数量从高到低的顺序输出
    return x.id<y.id;//按照名字字典序顺序从小到大输出
}//结构体排序要写cmp
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t[i].name>>t[i].a>>t[i].b>>t[i].c;//输出每位选手的信息
        t[i].sum=t[i].a+t[i].b+t[i].c;
        t[i].id=i;
    }
    sort(t+1,t+n+1,cmp);
    //sort函数一共有三个参数
    //如果你写的是for(int i=0;i<=n-1;i++),那么第一个和第二个参数是t,t+n
    //如果你写的是for(int i=1;i<=n;i++),那么第一个和第二个参数是t+1,t+n+1
    //第三个参数是判断函数
    //如果是从小到大排序,那么符号是<
    //如果是从大到小排序,那么符号是>
    for(int i=1;i<=n;i++){
        cout<<t[i].name<<" "<<t[i].sum<<endl;
    }//输出最终结果
    return 0;
}
这里空空如也






有帮助,赞一个