选手的个人得分与排名

评分与排名题目描述:在PK造船大赛的半决赛现场,有一批选手(假设为7人)参加比赛,并有5位评委给选手打分。打完分后,所有评委分数的和为该选手的最后得分。排名次有一条规则是:最后得分越高,名次越低(靠前)。当半决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续排,不用考虑同名次的选手人数。请编程实现组委会的评分和排名工作。输入:7行,每行5个数,表示5个评委对7位选手的评分。输出:2行,第1行为7位选手的最后得分(按出场顺序);第2行为每位选手的最后排名。

代码如下:

#include <stdio.h>
int main()
{
    int a[7][5],i,j,t;
    int total[7],pm[7],mc=1,index[7];
    for(i=0;i<7;i++)
    {
        total[i]=0;
        index[i]=i;
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);
            total[i] += a[i][j];
        }
    }

    //显示总成绩
    for(i=0;i<7;i++)
    {
        if(i<6)
            printf("%d ",total[i]);
        else
            printf("%d\n",total[i]);
    }


    //根据总成绩排名
    for (i=0;i<6;i++)
    {
        for (j=0;j<6-i;j++)
        {
            if(total[j]<total[j+1])
            {
                t=total[j];
                total[j]=total[j+1];
                total[j+1] = t;
                //交换索引
                t = index[j];
                index[j]=index[j+1];
                index[j+1]=t;
            }
        }
    }
    //显示名次
    t = index[i];
    pm[t] = mc;
    for (i=1;i<7;i++)
    {
        t = index[i];
        if(total[i]== total[i-1])
        {
            pm[t]=mc;
        }else
        {
            mc++;
            pm[t]=mc;
        }
        
    }
    for (i=0;i<7;i++)
    {
        if(i<6)
            printf("%d ",pm[i]);
        else
            printf("%d\n",pm[i]);
    }
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632