找出竞赛各小组第一名

首先依据解题数量从大到小排名,若解题数量相同,则比较罚时,罚时少的排名靠前。
【输入形式】
第一行是数据组数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;
}

暂时还没找到错误在哪

修改处见注释,供参考:

#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",&group);  //scanf("%d\n",&group);
    for(k=0;k<group;k++)
    {
        scanf("%d",&number); //scanf("%d\n",&number);
        for(i=0;i<number;i++)
        {
            scanf("%s %d %d",s[i].name,&s[i].num,&s[i].time);
                                     //scanf("%s %d %d\n",&s[i].name,&s[i].num,&s[i].time);
        }
        for(i=0;i<number-1;i++)  //for(i=0;i<=number;i++)
        {
            for(j=0;j<number-i-1;j++) //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;
}

for(i=0;i<=number;i++)
        {
            for(j=0;j<=number-i;j++)
            {
                if(s[j+1].num>s[j].num)
                这个j+1和j会超过number下标的
                比如 i=0 j=number,j+1=number+1,这时候已经不合理了,你需要修改下范围