Description
等小和尚回来后,老和尚居然没有睡觉。老和尚表示他的导员的excel表格坏掉了(老和尚居然有导员?好吧……据说是方丈),而且老和尚的导员要老和尚将寺中所有和尚的期末考试成绩按降序排列来发奖学金(和尚还有奖学金?) 不用多说,为了继续睡午觉,这个任务理所当然的落在了小和尚身上。所有……你继续帮忙吧。
Input
寺中主要考试科目有C语言,线性代数,高等数学和英语四个科目(怎么当和尚都这么累),输入的第一行是和尚的人数N(N<=100),第二行至第N+1行分别为C语言a[i],线性代数b[i],高等数学c[i]和英语的成绩d[i](0 <= a[i],b[i],c[i],d[i] <= 100)。
Output
现需要你将和尚们的成绩以总成绩降序排列,输出数据的每行有两个数字,第一个数字为和尚的编号(输入时的第一个和尚成绩即为和尚1,第二个为和尚2),第二个数字为和尚的总成绩)(如果总成绩相同,则按C语言的成绩排列,如在相同,则按线性代数输出编号,以此类推。)
Accepted Code
#include <bits/stdc++.h> using namespace std; struct $ { int ser; int c; int fuckxiandai; int fuckgaoshu; int e; int sum; }; $ stu[105]; bool comp($ a, $ b) { if (a.sum != b.sum) { return a.sum > b.sum; } else { if (a.c != b.c) { return a.c > b.c; } else { if (a.fuckxiandai != b.fuckxiandai) { return a.fuckxiandai > b.fuckxiandai; } else { if (a.fuckgaoshu != b.fuckgaoshu) { return a.fuckgaoshu > b.fuckgaoshu; } else { return a.e > b.e; } } } } } int main() { int n; while (cin >> n) { memset(stu, 0, sizeof(stu)); for (int i = 0; i < n; ++i) { stu[i].ser = i + 1; cin >> stu[i].c >> stu[i].fuckxiandai >> stu[i].fuckgaoshu >> stu[i].e; stu[i].sum = stu[i].c + stu[i].fuckxiandai + stu[i].fuckgaoshu + stu[i].e; } sort(stu, stu + n, comp); for (int i = 0; i < n; ++i) { cout << stu[i].ser << " " << stu[i].sum << endl; } } return 0; }
解后反思
结构体多因素排序水题