题目描述
现在有 n(n \le 1000)n(n≤1000) 位评委给选手打分,分值从 0 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
5
9 5 6 8 9
输出 #1复制
7.67
对于这题,我们的思路是:1)用一个数组存各个分数;2)找出max和min;3)对分数求和;4)求出平均数(记得减去max和min)
或者我们在第二部可以对分数数组递增排序,然后直接对从i=1到i=n-2进行求和
解法一
#include <stdio.h>
int main()
{
int a[1000],n;
double sum=0;--------------------注意数据类型是double
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);--------此处存分数
}
int max=0,min=10;
for(int i=0;i<n;i++)------------找max和min
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
for(int i=0;i<n;i++)----------求和
{
sum+=a[i];
}
sum=sum-max-min;---------------减去max和min
printf("%.2lf",sum/(n-2.0));
return 0;
}
解法二
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[1000],n,temp;
double sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int j=0;j<n-1;j++)----------递增排序
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(int i=1;i<n-1;i++)------------进行求和
{
sum+=a[i];
}
printf("%.2lf",sum/(n-2.0));
return 0;
}