首先依据解题数量从大到小排名,若解题数量相同,则比较罚时,罚时少的排名靠前。
【输入形式】
第一行是数据组数C,代表有C组测试实例。
每一组数据第一行为一个N,代表下面有N个人的成绩。
接下来N行,每一行依次给出名字Name,解题数量num和罚时time
【输出形式】
每组测试数据输出一行,依次为第一名的名字、解题数量和罚时,中间用空格隔开。
【样例输入】
1
3
Bob 5 50
Alice 4 46
John 5 48
【样例输出】
John 5 48
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char name[10];
int num;
int time;
}mag;
int main()
{
mag s[50],temp1,temp2;
int group,number,i,j,k;
scanf("%d\n",&group);
scanf("%d\n",&number);
for(k=0;k<group;k++)
{
for(i=0;i<number;i++)
{
scanf("%s %d %d\n",&s[i].name,&s[i].num,&s[i].time);
}
for(i=0;i<=number;i++)
{
for(j=0;j<=number-i;j++)
{
if(s[j+1].num>s[j].num)
{
temp1=s[j+1];
s[j+1]=s[j];
s[j]=temp1;
}
else if(s[j+1].num==s[j].num)
{
if(s[j+1].time<s[j].time)
{
temp2=s[j+1];
s[j+1]=s[j];
s[j]=temp2;
}
}
}
}
printf("%s %d %d\n",s[0].name,s[0].num,s[0].time);
}
return 0;
}
暂时还没找到错误在哪