PTA 6-1 歌唱比赛打分(函数题)题解

某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留2位小数,作为选手最终得分。
本题要求实现这样一个计分函数。
评委给出的分数存在数组中,分数均为0~100之间的整数,并且保证评委人数在3~20之间。

函数接口定义:

double getScore(int *score, int total);

其中scoretotal是传入的参数,score是评委打分数组的首地址,total是评委人数;
函数将选手的得分以double类型返回,注意:函数返回的分数只需保证小数点后至少2位精确数字即可,打印2位小数得分的操作由函数调用者进行。

裁判测试程序样例:

/* 此测试程序仅为示例,实际的测试程序可能不同,不要仅针对样例的输入和输出编写函数,而是要根据题意要求编写函数 */
#include <stdio.h>
double getScore(int *score, int total);
int main(){
    int score[5] = {92, 90, 99, 95, 98};   /* 仅为示例,实际的测试程序中,数组大小和元素数值都可能与样例不同 */
    printf("%.2f\n", getScore(score, 5) );  /* getScore( )函数只负责返回分值,由main函数中的代码负责按照2位小数打印输出 */
    return 0;
}
/* 你所编写的函数代码将被嵌在这里,注意:不要提交你编写的用于测试的main( )函数,否则无法通过编译 */

输入样例:

对于本题给出的裁判测试程序样例,没有输入。实际的裁判程序可能有输入。

输出样例:

对于本题给出的裁判测试程序样例,只有一行输出如下。实际的裁判程序可能有其他输出情况。
95.00

作者:周强 

代码长度限制:16 KB

时间限制:400 ms 

内存限制:64 MB

题目分析

 1.计算方法——总分(去掉最高分和最低分的总分)/保留分数的个数(total-2)

2.找出最高分和最低分——排序(这里可以采用简单的冒泡排序)——for循环嵌套

3.for循环对剩余的成绩求和,再除以个数得出最终结果。

double getScore(int *score, int total)
{
    int i,j,t;
    //对裁判评分进行升序排列——为后续去掉最高分和最低分做准备——此处为冒泡排序
    for(i=0;i<total;i++)
    {
        for(j=i;j<total-1;j++)
        {
            if(score[j]>score[j+1])//通过数组下标对内部元素访问比较方便
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
            }
        }
    }
    double s=0,ans=0;
    for(i=1;i<total-1;i++)//对除最高分和最低分外的分数求和
        s+=score[i];
    ans=s/(total-2);//计算平均分
    return ans;
}
上一篇:关灯问题II (状态压缩 BFS)


下一篇:Any-Precision Deep Neural Networks