引入案例:青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
输入:
3 99 98 97
4 100 99 98 97
输出:
98.00
98.50
对于此案例,我们可以定义变量 max,min 来储存最高分和最低分,累加sum之后,用 sum-min-max 除以 n-2 来求得平均值 aver
以下是代码:
#include<stdio.h>
int main()
{
int n,i;
float max,min,sor,sum,aver;
while(scanf("%d",&n)!=EOF && n>2 && n<=100)
{
max=0;
min=100;
sum=0;
for (i=0;i<n;i++)
{
scanf("%f",&sor);
sum+=sor;
if ( sor>max ) max=sor;
if ( sor<min ) min=sor;
}
aver=(sum-max-min)/(n-2);
printf("%.2f\n",aver);
}
return 0;
}
此方法相较于 数组排序 更为简单,鉴于在下是初学者,难免有错误或不周到的地方,欢迎大家指正!