这是一道入门题,却令我及其的头疼
2023-08-02 21:25:37
发布于:上海
127阅读
0回复
0点赞
这道题是考结构体的应用,所以在该作的准备都做完以后先写结构体:
新老朋友:
#include <iostream>
#include <string>//这行不是必要的,如果你头铁非要用char ch [num];之类的话
#include <algorithm>//这行也不是必要的,如果你够头铁非要自己写快排的话
using namespace std;
结构体:
struct Struct{
string name;
int a,b,c,sum=0,id;//a金牌b银牌c铜牌d总牌数
//感谢“末影珍珠”的雪中送炭,不然我永远想不到还需要一个id
}lst[100005];//数组存储选手信息
排序方面最好用 sort() 来逃课,如果自己写快排效率会低很多,而且很费脑子,这是入门题啊!
排序逻辑函数:
int cmp(Struct x,Struct y){
if(x.sum!=y.sum){
return x.sum>y.sum;//先思考总数
}
else if(x.a!=y.a){
return x.a>y.a;//再思考金牌数
}
else if(x.b!=y.b){
return x.b>y.b;//然后思考银牌数
}
return x.id<y.id;//最后思考输入顺序(写的时候把x.id<y.id写成了x.id>y.id炸毛了好久QWQ)
}
然后是各位艾草狗最高兴的环节:
主函数:
int n;
int main(){
cin>>n;//首先打野提升一下经济(bushi)
for(int i=0;i<n;i++){
Struct t;
cin>>t.name>>t.a>>t.b>>t.c;
t.sum=t.a+t.b+t.c;
t.id=i;
lst[i]=t;//该输入的输入,该存的存;
}
sort(lst,lst+n,cmp);//然后让sort()去对面输出,再让cmp()在后面找机会回一下(doge)
for(int i=0;i<n;i++){
cout<<lst[i].name<<" "<<lst[i].sum<<"\n";//注意换行
}//趁这个时候让cout去偷塔(手动狗头)
return 0;
}
什么?你还想让我发完整代码?下方小黄车,买一送......啊呸!
全部评论 1
严,你还干写题解?
2023-08-07 来自 上海
1
有帮助,赞一个