东方博宜OJ 4812:美食烹饪大赛排名 ← 结构体 + 结构体排序
【题目来源】
https://oj.czos.cn/p/4812
【题目描述】
某电视台举办美食烹饪大赛,现在给定了几位选手的选手编号和总分,要求按总分从高到低的顺序输出选手的编号和总分,如果总分相同,就将选手编号小的排在前面。
【输入格式】
输入第一行包含一个整数 n,(n≤100)表示选手的数量。
接下来的 n 行每行包含两个整数,分别表示一个选手的编号 id 和总分 score。每个选手的信息占据一行,且编号和分数之间用空格分隔。
【输出格式】
输出 n 行,每行包含两个整数:选手的编号 id 和总分 score。这些选手应按照总分从高到低排序;若总分相同,则按选手编号从小到大排序。确保输出格式与输入格式一致,即每行的两个数值之间用空格分隔。
【输入样例】
3
1 84
2 87
3 84
【输出样例】
2 87
1 84
3 84
【数据范围】
n≤100
【算法分析】
● 按结构体某一字段对结构体数组进行排序:https://blog.csdn.net/hnjzsyjyj/article/details/120184972
【算法代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
struct Person {
int idx;
int score;
} p[maxn];
bool cmp(Person x,Person y) {
if(x.score!=y.score) {
return x.score>y.score;
}
return x.idx<y.idx;
}
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>p[i].idx>>p[i].score;
}
sort(p+1,p+1+n,cmp);
for(int i=1; i<=n; i++) {
cout<<p[i].idx<<" "<<p[i].score<<endl;
}
return 0;
}
/*
in:
3
1 84
2 87
3 84
out:
2 87
1 84
3 84
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/156466035
https://blog.csdn.net/hnjzsyjyj/article/details/156479934
https://blog.csdn.net/hnjzsyjyj/article/details/120184972

浙公网安备 33010602011771号