NYOJ-比赛

题目描述

                   今天Acm举行了一场比赛,邀请大一的学生参加比赛,实际来了m个学生,当他们做好自己的位置的时候,一个Acm的成员小z按照顺序登记他们的信息(学号,姓名),当他们比赛完之后按照小z登记的信息填写他们的成绩;现在问题来了,acm的小z只记录大一同学的成绩,不知道排名,但小z想知道他们的排名,他很苦恼,聪明的你帮他写个程序解决一下吧。

输入

第一行是一个整数T表示测试数据的组数
每组测试数据的第一行 有一个整数m(m<=100)表示大一比赛的人数,之后m行,每行包含三个数据表示一个学生的信息,分别表示学生的学号,姓名,比赛成绩。

输出

输出每组学生排过序的名单(成绩相同谁在前面先输出谁)

样例输入

1
3
12066 zhangming 23
11077 wangming 45
13088 zhaoqian 15

样例输出

11077 wangming 45
12066 zhangming 23
13088 zhaoqian 15

分析:运用结构体排序即可,注意设置排序方法。

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=1e2+5;
struct Stu//定义学生结构体
{
	ll num,score;
	char name[20];
}stu[M];
bool cmp(Stu a,Stu b)//定义排序方法(降序)
{
	if(a.score>=b.score)
	return true;
	else
	return false;
}
ll t,n,m,i,j,k;
int main()
{
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld",&m);//输入学生人数
		for(i=1;i<=m;i++)//输入学生数据
			scanf("%lld%s%lld",&stu[i].num,stu[i].name,&stu[i].score);
		sort(stu+1,stu+m+1,cmp);//对学生数据进行排序
		for(i=1;i<=m;i++)//输出已排序的学生数据
			printf("%lld %s %lld\n",stu[i].num,stu[i].name,stu[i].score);
	}
}

猜你喜欢

转载自blog.csdn.net/basketball616/article/details/86628607