高质量题解|A101365皓仔的成绩排序
2026-02-26 20:22:09
发布于:湖北
1阅读
0回复
0点赞
解题思路
结构体 stu 内写上 4 个元素,分别为姓名(string)、年龄(int)、平均分(double or float)、输入顺序(int);数组在 10 的 5 次方以外就行了
排序规则就是题目中所给的:先假设平均分不一样,进行平均分的降序排序;接着假设年龄不一样,进行升序排序;然后对姓名进行升序排序;最后对输入顺序进行升序排序(a[i].id = i)
最后输出,平均分 avg 用 printf() 输出,保留两位小数
代码
#include <bits/stdc++.h>
using namespace std;
struct stu{
string name;
int age,id;
double avg;
}a[114514];
bool cmp(stu x,stu y){
if(x.avg != y.avg){
return x.avg > y.avg;
}else if(x.age != y.age){
return x.age < y.age;
}else if(x.name != y.name){
return x.name < y.name;
}else{
return x.id < y.id;
}
}
int main(){
int n;
cin >> n;
for(int i = 1;i <= n;i++){
cin >> a[i].name >> a[i].age >> a[i].avg;
a[i].id = i;
}
sort(a + 1,a + n + 1,cmp);
for(int i = 1;i <= n;i++){
cout << a[i].name << " " << a[i].age << " ";
printf("%.2f",a[i].avg);
cout << " ";
cout << a[i].id << endl;
}
return 0;
}
时间复杂度
O(n log n)
这里空空如也








有帮助,赞一个