结构体排序
2026-05-16 15:13:49
发布于:湖北
24阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n, ans[10010]; // n=学生人数,ans[学号]=排名
struct node {
int c, m, e; // c=语文,m=数学,e=英语
int id; // 学号
int mx, s, sum; // mx=语数最高分,s=语数总分,sum=三科总分
} a[10010]; // 补充定义数组a,修复未定义报错
bool cmp(node x, node y) { // 排序比较函数
if (x.sum == y.sum) { // 总分相同
if (x.s == y.s) { // 语数总分相同
return x.mx > y.mx; // 语数最高分高的在前
}
return x.s > y.s; // 语数总分高的在前
}
return x.sum > y.sum; // 总分高的在前
}
int main() {
cin >> n; // 输入学生人数
for (int i = 1; i <= n; i++) { // 逐个输入学生信息
cin >> a[i].c >> a[i].m >> a[i].e; // 输入语数英成绩
a[i].id = i; // 学号为输入顺序
a[i].mx = max(a[i].c, a[i].m); // 语数最高分
a[i].s = a[i].c + a[i].m; // 语数总分
a[i].sum = a[i].s + a[i].e; // 三科总分
}
sort(a + 1, a + n + 1, cmp); // 按规则排序
int j = 1; // 当前排名
for (int i = 1; i <= n; i++) { // 计算排名
// 与上一名所有条件相同则并列,排名不变(i=1时i-1=0,跳过判断)
if (i > 1 && a[i].sum == a[i-1].sum && a[i].s == a[i-1].s && a[i].mx == a[i-1].mx) {
ans[a[i].id] = j;
} else { // 否则更新排名
ans[a[i].id] = i;
j = i;
}
}
for (int i = 1; i <= n; i++) { // 按输入顺序输出排名
cout << ans[i] << endl;
}
return 0;
}
这里空空如也



有帮助,赞一个