比赛打分-去掉最低分和最高分后的平均分

463 阅读2分钟

歌手比赛打分

问题描述

歌手大赛上,6名评委给1位参赛者打分,6个人打分的平均分是9.6分。如果去掉一个最高分,这名参赛者的平均分是9.4.如果去掉一个最低分,这名参赛者的平均分是9.8分。

问: 如果去掉一个最高分和一个最低分,这名参赛者的平均分是多少分?

分析

1、6人打分,平均分是9.6 ,可以求出6人的总分,记作T ;

2、去掉一个最高分,平均分是 9.4 ,可以求出 最高分 T -(5 * 9.4),记作H ;

3、去掉一个最低分,平均分是 9.8 ,可以求出 最低分 T -(5 * 9.8),记作L ;

4、总分 - 最高分 - 最低分 ,再除以4 就是所求 。 (T - H - L)/4 , 记作 avg 。

代码实现

中间变量过度方式解法

#include <iostream>
using namespace std;

int main() {
    std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;


    float avg6,avg_max,avg_min,t,high,low,avg4;

    avg6=9.6f; // 6人平均分
    avg_min=9.4f; // 去掉最高分后的平均分
    avg_max=9.8; // 去掉最低分后的平均分

    t = avg6 * 6; // 总分

    high = t - 5*avg_min;
    low = t- 5 * avg_max;

    avg4= ( t - high - low )/4;

    printf("去掉一个最高分,去掉一个最低分,平均分是 %4.2lf",avg4);

    return 0;


}

化简后省去中间变量解法

优化变量后实现如下 :

#include <iostream>
using namespace std;

int main() {
    std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;
    
    float avg6,avg_max,avg_min,avg4;
    avg6=9.6f; // 6人平均分
    avg_min=9.4f; // 去掉最高分后的平均分
    avg_max=9.8; // 去掉最低分后的平均分

    avg4=  ((avg_min+avg_max)*5-avg6*6)/4;

    printf("去掉一个最高分,去掉一个最低分,平均分是 %4.2lf",avg4);
    return 0;


}

运行结果

image.png

扩展

1、 比赛打分-去掉运气分后的平均分

2、比赛打分-权重分计算