Advertisement

上海计算机学会2021年12月月赛C++丙组T2评委打分

阅读量:
题目描述

许多比赛在计算选手得分平均数的时候,都会先去掉一个最高得分,再去掉一个最低得分,这样可以避免极大值与极小值对平均值的影响。

给定 n个数字 a1​,a2​,⋯,an​,表示一个选手获得的分数,请根据上述流程计算选手的最终得分。

注意如果有多个分数并列第一,则只会去掉一个最高分,去掉最低分的情况同理。

输入格式

第一行:单个整数 n;
第二行:n 个整数表示 a1​,a2​,⋯,an​。

输出格式

一个浮点数:表示最终得分,四舍五入保留两位小数。

数据范围
  • 对 50%50% 的数据,3≤n≤1000;
  • 对 100%100% 的数据,3≤n≤100000;
  • 0≤ai​≤20000。
样例数据

输入:

5
100 1 20 30 40

输出:

30.00

说明:

(20+30+40)/3=30.00

解析:

本题关键点:找出最大值,最小值,算出总值减去最大值和最小值,最后算平均分,并且保留2位小数。代码如下:

复制代码
 #include <iostream>

    
 #include<iomanip>
    
 using namespace std;
    
 int main(){
    
 	 int n;
    
 	 int max, min;
    
 	 long sum;
    
 	 double avg;
    
 	 cin >> n;
    
 	 int arr[n];
    
 	 cin >> arr[0];
    
 	 min = arr[0];
    
 	 max = arr[0];
    
 	 sum = arr[0];
    
 	 if (n >= 3 && n <= 100000) {
    
 	     for (int i = 1; i < n; i++) {
    
 	         cin >> arr[i];
    
 	         sum += arr[i];
    
 	         if (arr[i] > max)
    
 	             max = arr[i];
    
 	         if (arr[i] < min)
    
 	             min = arr[i];
    
 	     }
    
 	     avg = double(sum - max - min) / (n - 2);
    
 	 }
    
 	 //输出保留2位小数 
    
 	 cout << fixed << setprecision(2) << avg << endl;
    
 	 return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~