无序数据进行排序,再求平均值

题目描述:

现在有 𝑛(𝑛≤1000) 位评委给选手打分,分值从 00 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。

思路提供:

毫不犹豫我们会想到用数组来解决,同时因为每位评委打的分数可能不同,又因为按照规则我们需要去掉一个最高分和一个最低分,因此我们可以在使用函数sort来进行排序。我们也不知道有多少评委,因此我们可以选择用vector容器来装分数。所以进行排序后,去掉第一个和最后一个数据,就是题目所要求的,再求平均数。

代码实现:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	int  n, num;
	double s = 0.0;
	vector<int> v;//定义一个整型vector容器
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num;//输入评委分数
		v.push_back(num);//装进容器
	}
	sort(v.begin(), v.end());//对容器的数据进行排序
	v.erase(v.begin());//删除排序后的第一个数据
	v.pop_back(); //删除了排序后的最后一个数据
	for (int i = 0; i < v.size(); i++) 
		s += v[i];//遍历所有数据,累加
	double p = s / v.size();//求平均数
	printf("%.2lf", p);
	return 0;
}

注意事项:

1.在输入分数装进容器时,我们不能直接cin>>v[i],因为此时 vector 还没有元素,应该使用 push_back 方法来添加元素。

2.注意各变量的定义类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值