题目描述
今天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);
}
}