hpuoj【1031】排序【结构体】&&【sort】

1031: 排序 [水题]

时间限制: 1 Sec  内存限制: 128 MB

提交: 93  解决: 29  统计

题目描述

有若干个同学的成绩单,形式如下:

姓名 语文成绩 数学成绩 英语成绩 颜值 ...

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<cstdio>
#include<algorithm>
using namespace std;
struct People
{
	char c[100];
	int ch;
	int ma;
	int en;
	int ha;
}num[10003];
bool cmp(People a,People b)
{
	if(a.ch!=b.ch)
	   return a.ch>b.ch;
	else 
	{
		if(a.ma!=b.ma)
		   return a.ma>b.ma;
		else 
		{
			if(a.en!=b.en)
			   return a.en>b.en;
			else 
			{
				if(a.ha!=b.ha)
			       return a.ha>b.ha;
			}
		}
	}
}
int main()
{
	int T;
	scanf("%d\n",&T);
	while(T--)
	{
		int n;
		scanf("%d\n",&n);
		for(int i=0; i<n; i++)
		   scanf("%s%d%d%d%d",&num[i].c,&num[i].ch,&num[i].ma,&num[i].en,&num[i].ha);
		sort(num,num+n,cmp);
		for(int i=0; i<n; i++)
		   printf("%s %d %d %d %d\n",num[i].c,num[i].ch,num[i].ma,num[i].en,num[i].ha);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值