C语言求解排序123456

Problem Description
有n个无聊的人在比赛跳远,看谁跳的最远。每个人可以跳3次,这个人的成绩就是三次距离里面的最大值。例如,一个人跳3次的距离分别时10, 30和20,那么这个人的成绩就是30。给出每个人三次跳的距离,问最终每个人的排名是多少。
Input
输入文件的第一行有一个整数T (1≤T≤100),表示测试数据的组数。对于每组测试数据:第一行包括一个整数n (2≤n≤3), 表示人数. 接下来n行, 每行包含三个整数ai,bi 和 ci (1≤ai,bi,ci,≤300), 表示第i个人每次的跳的距离。输入数据保证每个人的成绩互不相同。
Output
对于每组数据,输出一行包含n个整数,用一个空格隔开。第i个数表示第i个人的最终名次。
SampleInput
2
3
10 10 10
10 20 30
10 10 20
2
3 4 1
1 2 1
SampleOutput
3 1 2
1 2

提示:
对于第一组数据,3个人的成绩分别时10, 30和20。因此他们最终排名依次是3, 1和2.

对每个人成绩进行求出最大值,对三个人的最大值再进行排序

int max(int a,int b)
{
      if(a > b)
        return a;
      return b;
}

void sort(int a[],int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-i-1;j++)
              if(a[j] < a[j+1])
              {
                      int t = a[j];
                      a[j] = a[j+1];
                      a[j+1]  =t;
              }
}

int main()
{
    int n,m,i,j; 
    int s[3] = {0};
    int *max = NULL,*sortmax =  NULL;
    printf("请输入测试组数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
            printf("请输入第%d组的人数:",i+1);
            scanf("%d",&m);
            max = (int*)malloc(m*sizeof(int));
            sortmax = (int *)malloc(m*sizeof(int));
            for(j=0;j<m;j++)
            {
                    printf("请输入第%d个人的三组成绩:",j+1);
                    scanf("%d%d%d",&s[0],&s[1],&s[2]);
                    max[j] = max(max(a,b),c);
                    sortmax[j] = max[j];
            }
            sort(sortmax,3);
            for(i=0;i<2;i++)
            {
                  for(j=0;j<2;j++)
                  {
                          if(max[i] == sortmax[j])
                                  printf("%d ",j+1);
                  }
            }
            printf("\n");
            free(sortmax):
            free(max);
    }
    return 0;
}

见:


有帮助望采纳

你可以参考如下链接:


如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮