洛谷刷题录 :歌唱比赛计分

 一、题目

# 【深基7.例4】歌唱比赛

 

## 题目描述

$n(n\le 100)$ 名同学参加歌唱比赛,并接受 $m(m\le 20)$ 名评委的评分,评分范围是 $0$ 到 $10$ 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 $m-2$ 个评分的平均数。请问得分最高的同学分数是多少?评分保留 $2$ 位小数。

## 输入格式

第一行两个整数 $n,m$。   
接下来 $n$ 行,每行各 $m$ 个整数,表示得分。

## 输出格式

输出分数最高的同学的分数,保留两位小数。

## 样例 #1

### 样例输入 #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
```

二、代码

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
	int a[100][20];
	int n, m;
	while (cin >> n >> m)
	{
		for (int i = 0;i < n;i++)
			for (int j = 0;j < m;j++)
				cin >> a[i][j];
		double t, Max = 0;
		//遍历每一行,假设现在是第1行
		for (int i = 0;i < n;i++)	
		{
			//先设置第一行的最小和最大初值,依据是打分范围在(0,10)
			int max = 0, min = 10, s = 0;
			//遍历该行的所有元素,找出最高分和最低分
			for (int j = 0;j < m;j++)
			{
				if (max < a[i][j])
					max = a[i][j];
				if (min > a[i][j])
					min = a[i][j];
				s += a[i][j];
			}
			t = double(s - max - min) / (m - 2);
			//cout << t << endl;计算并输出检查每行的有效平均分是否正确
			if (Max < t)
				Max = t;
		}
		cout <<fixed<<setprecision(2)<<Max << endl;
	}
	return 0;
}

三、总结

一些心得:

本题虽然可以用排序法找出最高分和最低分(简单粗暴) ,但是没必要(比较耗时)。不如直接遍历找出max和min(变换赋值法)。

(个人刷题录,欢迎交流,共同学习进步)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值