题目描述
现在有 n(n \le 1000)n(n≤1000) 位评委给选手打分,分值从 00 到 1010。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 22 位小数。
输入格式
第一行输入一个正整数 nn,表示有 nn 个评委。
第二行输入 nn 个正整数,第 ii 个正整数表示第 ii 个评委打出的分值。
输出格式
输出一行一个两位小数,表示选手的最后得分。
补充:假设法.
为了让一个数据存最大值,我们可以先放一个最小的数据在我们将要存最大值的变量当中.同理,为了让一个数据存最小值,我们可以先放一个最大的数据在我们将要存最小值的变量当中.
如本题中评委的评分只能是0-9,而我们定义一个变量h=-1,那么h的值在下次必定会更新,让更新后的h值和后续输入的s的值继续玩,玩到最后h将会是当中的最大值.
我们定义一个变量l=11,那么l的值在下次必定会更新,让更新后的l值和后续输入的s的值继续玩,玩到最后l将会是当中的最小值.
c++输出保留小数(s假定为我们要输出的数)
cout<<fixed<<setprecision(n)<<s; ----->保留n位小数
eg:cout<<fixed<<setprecision(1)<<s; ------>保留1位小数
cout<<fixed<<setprecision(2)<<s; -------->保留2位小数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,s,h=-1,l=11,sum=0; //h和l分别最终存最大和最小值
float k; //k存n-2个评委的平均值
cin>>n; //输入n个评委
for(int i=1;i<=n;i++){ //循环n次以输入n个评委的分数
cin>>s; //输入评委分数
sum=sum+s; //把每次输入的分数放到sum中,即sum是评委分数总和
h=max(s,h); //h存最高的评委评分
l=min(s,l); //l存最低的评委评分
}
k=1.0*(sum-h-l)/(n-2); //求剩下n-2个评委评分的平均值
cout<<fixed<<setprecision(2)<<k;
}