1 条题解
-
0
利用选择排序
#include <bits/stdc++.h> using namespace std; struct Stu { //学号、语、数、英成绩、总分 int id, chi, mat, eng, tot; }; int n; Stu a[305]; //返回两个参数是否满足严格偏序 bool cmp(Stu x, Stu y) { if(x.tot != y.tot) return x.tot > y.tot; //如果上面的 if 没有成立 //没有执行 return 语句 //才会继续执行下面的代码 //所以下面的代码自带 x.tot == y.tot 成立这个条件 if(x.chi != y.chi) return x.chi > y.chi; return x.id < y.id; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].chi >> a[i].mat >> a[i].eng; a[i].id = i; a[i].tot = a[i].chi + a[i].mat + a[i].eng; } //选择排序 for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) if (!cmp(a[i], a[j])) swap(a[i], a[j]); for (int i = 1; i <= 5 && i <= n; i++) cout << a[i].id << " " << a[i].tot << "\n"; return 0; }
利用 sort 函数
#include <bits/stdc++.h> using namespace std; struct Stu { //学号、语、数、英成绩、总分 int id, chi, mat, eng, tot; }; int n; Stu a[305]; //返回两个参数是否满足严格偏序 bool cmp(Stu x, Stu y) { if(x.tot != y.tot) return x.tot > y.tot; //如果上面的 if 没有成立 //没有执行 return 语句 //才会继续执行下面的代码 //所以下面的代码自带 x.tot == y.tot 成立这个条件 if(x.chi != y.chi) return x.chi > y.chi; return x.id < y.id; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].chi >> a[i].mat >> a[i].eng; a[i].id = i; a[i].tot = a[i].chi + a[i].mat + a[i].eng; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= 5 && i <= n; i++) cout << a[i].id << " " << a[i].tot << "\n"; return 0; }
- 1
信息
- ID
- 399
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 106
- 已通过
- 40
- 上传者