歌手比赛打分
问题描述
歌手大赛上,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;
}