题目描述
n(n≤100)n(n≤100) 名同学参加歌唱比赛,并接受 m(m≤20)m(m≤20) 名评委的评分,评分范围是 00 到 1010 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m−2m−2 个评分的平均数。请问得分最高的同学分数是多少?评分保留 22 位小数。
输入格式
第一行两个整数 n,mn,m。
接下来 nn 行,每行各 mm 个整数,表示得分。
输出格式
输出分数最高的同学的分数,保留两位小数。
输入输出样例
输入 #1
7 6 4 7 2 6 10 7 0 5 0 10 3 10 2 6 8 4 3 6 6 3 6 7 5 8 5 9 3 3 8 1 5 9 9 3 2 0 5 8 0 4 1 10
输出 #1
6.00
AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
int i , n , m , j , sum , b;
int a[110];
int main()
{
double f=0,anw=0,max=0;
scanf(" %d %d ", &n , &m );
b = m - 2;//去除最值后的分数个数
for( i = 1 ; i <= n; i++ )
{
for( j = 1 ; j <= m ; j++ ) std :: cin >> a[j];
std::sort(a+1,a+1+m);//排序
for( sum = 2 ; sum < m ; sum++ ) anw+=a[sum];//分数相加 自动排除最值
f = anw / b ;//平均
if ( f > max ) max = f;//替换
f = 0 ; anw = 0;/重新赋值
}
printf ( "%.2f" , max );//不会cout的我屑了
//这样应该会好看点(手动doge)
}
基本思路:
- 定义变量和数组:
- 定义一个二维数组
scores
来存储每位同学的评分。 - 定义两个变量
maxScore
和maxStudent
,用于记录最高分和得分最高的同学。
- 定义一个二维数组
- 读取输入:
- 读取
n
和m
,分别表示同学的数量和评委的数量。 - 循环读取每位同学的评分,并存储在
scores
数组中。
- 读取
- 计算每位同学的得分:
- 对于每位同学,遍历其所有评分。
- 找出最高分和最低分,并从总分中减去这两个分数。
- 计算剩余评分的平均数,即该同学的最终得分。
- 找出得分最高的同学:
- 初始化
maxScore
为一个较低的值。 - 对于每位同学,比较其得分和
maxScore
。 - 如果当前同学的得分高于
maxScore
,则更新maxScore
和maxStudent
。
- 初始化
- 输出结果:
- 输出
maxStudent
的得分,保留两位小数。
- 输出