问题描述
实现一个程序,输入整数a和a组包含姓名、分数、性别、年龄的数据,按分数从高到低排序后输出姓名、性别、年龄。
输入输出示例
输入:
4
King 25 b 11
Cici 50 b 12
TobyK 100 b 11
Max 78 g 12
输出:
TobyK b 11
Max g 12
Cici b 12
King b 11
解决方案
使用结构体存储每条数据,自定义比较函数对结构体数组按分数降序排序。
实现步骤
定义结构体MJ,包含姓名、分数、性别、年龄字段。
struct MJ {
string name;
LL fs;
char sex;
LL nl;
};
自定义比较函数bComp,按分数降序排列。
bool bComp(const MJ& a, const MJ& b) {
return a.fs > b.fs;
}
主函数中读取输入数据,排序后输出结果。
int main() {
LL a;
cin >> a;
vector<MJ> arry(a, {"", 0, 'M', 0});
for(int i = 0; i < a; i++) {
cin >> arry[i].name >> arry[i].fs >> arry[i].sex >> arry[i].nl;
}
sort(arry.begin(), arry.end(), bComp);
for(int i = 0; i < a; i++) {
cout << arry[i].name << ' ' << arry[i].sex << ' ' << arry[i].nl << endl;
}
return 0;
}
完整代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
struct MJ {
string name;
LL fs;
char sex;
LL nl;
};
bool bComp(const MJ& a, const MJ& b) {
return a.fs > b.fs;
}
int main() {
LL a;
cin >> a;
vector<MJ> arry(a, {"", 0, 'M', 0});
for(int i = 0; i < a; i++) {
cin >> arry[i].name >> arry[i].fs >> arry[i].sex >> arry[i].nl;
}
sort(arry.begin(), arry.end(), bComp);
for(int i = 0; i < a; i++) {
cout << arry[i].name << ' ' << arry[i].sex << ' ' << arry[i].nl << endl;
}
return 0;
}
技术要点
- 结构体定义:使用结构体组织数据,便于管理多个字段。
- 自定义排序:通过自定义比较函数实现降序排列。
- STL使用:利用
vector存储数据,sort函数进行排序。
扩展思考
- 如果分数相同,可以进一步按姓名或年龄排序。
- 输入数据量较大时,考虑优化读取和排序效率。
有没有不用sort函数就可以有二分查找(不论简/复):)
3197

被折叠的 条评论
为什么被折叠?



