1031: 排序 [水题]
时间限制: 1 Sec 内存限制: 128 MB提交: 7 解决: 3
[ 提交][ 状态][ 讨论版]
题目描述
有若干个同学的成绩单,形式如下:
姓名 语文成绩 数学成绩 英语成绩 颜值 ...
QAQ 59 59 59 100 ...
......
现在我想把这些同学的成绩按照一定顺序排列出来,请你帮帮我吧。
排列顺序如下:
(1)先比较语文成绩,语文成绩高的排前面;
(2)语文成绩相同的话,比较数学成绩,数学成绩高的排前面;
(3)数学成绩相同的话,比较英语成绩,英语成绩高的排前面;
(4)英语成绩相同的话,那就看脸啦,长的帅的排前面。
输入
第一行输入一个整数
T
,代表有
T
组测试数据。
每组数据第一行输入一个整数 N
,代表有 N个学生的成绩。
接下来 N
行,每行依次输入一个字符串 Name 和四个整数 Chinese、Math、English、Handsome,分别代表该同学的名字、语文成绩、数学成绩、英语成绩、帅气程度(值越大表示越帅气)。
注: 1<=T<=20,1<=N<=1000,1<=|Name|<=10,0<=Chinese,Math,English<=100,1<=Handsome<=N
其中字符串 Name
均有大写字母构成,保证 Handsome的值均不相同。
输出
对每组数据,依次输出
N
个学生经过排序后的成绩。
样例输入
2
2
QAQ 59 59 59 2
WA 59 59 59 1
3
QAQ 59 59 59 2
WA 59 59 58 3
TLE 59 59 59 1
样例输出
QAQ 59 59 59 2 WA 59 59 59 1 QAQ 59 59 59 2 TLE 59 59 59 1 WA 59 59 58 3 好水的一道题啊,中间写错哥变量错啦半个小时 好气啊,窝好菜啊#include<stdio.h> #include<algorithm> using namespace std; struct ST{ char name[15]; int c,m,e,h; }p[1000 +5]; int cmp(ST a,ST b) { if(a.c!=b.c) return a.c > b.c; else{ if(a.m!=b.m) return a.m > b.m; else{ if(a.e!=b.e) return a.e > b.e; else return a.h > b.h; } } } int main() { int T,n; scanf("%d",&T); while(T--){ scanf("%d\n",&n); for(int i = 0;i < n;i ++) scanf("%s %d%d%d%d",p[i].name,&p[i].c,&p[i].m,&p[i].e,&p[i].h); sort(p,p+n,cmp); for(int i = 0;i < n;i++) printf("%s %d %d %d %d\n",p[i].name,p[i].c,p[i].m,p[i].e,p[i].h); } return 0; }