题解(附加每一步注释)
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;
}
这里空空如也
有帮助,赞一个