7-31 歌唱比赛计分 pta (一行一句注释)

本文介绍了一个编程问题,涉及10名歌手参加歌咏比赛,通过输入6名评委的打分,计算每位歌手的最终得分(去掉最高分和最低分后取平均值),并按照得分从高到低排序输出歌手编号和得分。
摘要由CSDN通过智能技术生成

设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入,计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。

输入格式:

依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔),第2个歌手的6位评委打分...以此类推。

输出格式:

参照输出示例,按最终得分由高到低的顺序输出每位歌手的编号及最终得分(最终得分保留2位小数)。

输入样例:

1 4 7 3 6 3
8 7 8 5 9 8
7 5 6 8 5 4
7 6 7 5 6 5
3 5 6 7 5 5
7 7 7 8 9 6
7 7 6 7 6 8
9 4 3 7 3 6
4 8 6 7 5 8
8 7 8 8 9 8

输出样例: 

No.10: 8.00
No.2 : 7.75
No.6 : 7.25
No.7 : 6.75
No.9 : 6.50
No.4 : 6.00
No.3 : 5.75
No.5 : 5.25
No.8 : 5.00
No.1 : 4.00

答案代码:

#include<stdio.h>
int main ()
{
    int a[10];         //用于给每位选手计分
    double score[10];  //用于计算平均分
    int sum;           //用于给每位选手计总分
    int i,j;
    for (i=0;i<10;i++)
    {
        sum=0;         //总分默认为0
        for (j=0;j<6;j++)  //6名选手,每个选手走一遍这个循环
        {
            scanf ("%d",&a[j]);
            sum+=a[j];     //每位选手的总分
        }
        //下面这几行,用于去除最高分与最低分///
        int max=a[0],min=a[0];
        int k;
        for (k=0;k<6;k++)
        {
            if (a[k]>max) max=a[k];
            if (a[k]<min) min=a[k];
        }
        sum=sum-max-min;    //找到了最高与最低,在总分中减去
        //
        score[i]=sum*1.0/4; //计算平均分,并储存在score数组中
    }
//下面这几行,用于给每位选手编号
    for (i=0;i<10;i++)
    {
        a[i]=i+1;   //比如i=0为第一位选手的数据,其编号为i+1=1;
    }
//下面这几行,用于给每位选手排序,排序时不仅要排成绩,还要把相应的编号排了,核心是冒泡排序//
    double temp;
    int temp1;
    for (i=0;i<9;i++)
    {
        for (j=0;j<9;j++)
        {
            if (score[j+1]>score[j])
            {
                temp=score[j+1];    //这三行排成绩
                score[j+1]=score[j];
                score[j]=temp;
 
                temp1=a[j+1];       //这三行排编号
                a[j+1]=a[j];
                a[j]=temp1;
            }
        }
    }
///下面这几行,是输出系统,但要注意题目要求的两位左对齐格式//
    for (i=0;i<10;i++)
    {
        printf ("No.%-2d: %.2lf\n",a[i],score[i]);
    }///注意这个%-2d,其中,2表示这个数按两位输出,若不够两位
}///则补空格补成两位,-表示左对齐,+表示右对齐,可自行输出感受一下差别

 请关注博主支持一下吧qwq

 共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值