现在有 n(n≤1000) 位评委给选手打分,分值从 0 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。
输入格式
无
输出格式
无
输入输出样例
输入 #1
5
9 5 6 8 9
输出 #1
7.67
这题除了下面的方法外,还可以使用sort函数,然后循环i=1;i<n;i++就行
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i,s1=0,max,min;
double s;
cin>>n;
int a[n];
for(i=0;i<n;i++)
{
cin>>a[i];
}
max=a[0];
min=a[0];
for(i=0;i<n;i++)
{
if(a[i]>=max)
{
max=a[i];
}
if(a[i]<=min)
{
min=a[i];
}
}
//以下两个循环目的是找出最大(最小)值对应的a[i]并将其归0
//要立即break防止多个最大(最小)值对应的a[i]都归0
for(i=0;i<n;i++)
{
if(a[i]==max)
{
a[i]=0;
break;
}
}
for(i=0;i<n;i++)
{
if(a[i]==min)
{
a[i]=0;
break;
}
}
for(i=0;i<n;i++)//因为最大最小值对应的a[i]都归0,所以可以直接求平均,但总人数少了两个
{
s1=a[i]+s1;
}
s=(s1*1.00)/(n-2);//保留小数,所以乘一个1.00
cout<<fixed<<setprecision(2)<<s;
return 0;
}