上海计算机学会2022年2月月赛C++丙组T1评委打分(二)

文章介绍了如何通过编程解决一个实际问题,即给定评委对运动员分数的场景,计算在去掉一个最高分和一个最低分后剩余评委的平均得分。给出了C++代码示例和数据范围说明。
题目描述

给定一个正整数 �n,表示有 �n 位评委对一名运动员的表现打出了分数。已知:

  • 如果去掉一个最高分,平均得分为 a;
  • 如果不去掉任何分数,平均得分为 b;
  • 如果去掉一个最低分,平均得分为 c。

如果同时去掉一个最高分及一个最低分,平均得分应该是多少?

输入格式

第一行:单个整数表示 n;
第二行:三个浮点数表示 a,b 与 c,每个浮点数的数字不超过 88 位。

输出格式

一个浮点数:表示去掉一个最高分及一个最低分之后的平均分,四舍五入保留两位小数。

数据范围
  • 3≤n≤10003≤n≤1000。
  • 1≤a≤b≤c≤1001≤a≤b≤c≤100。
样例数据

输入:

3
40.00 60.00 85.00

输出:

70.00

说明:

三名评委的打分为10.00, 70.00, 100.00

解析:

本题关键点:先算出不去掉任何分数的总分,再算出最高分数和最低分数,又再算出同时去掉一个最高分及一个最低分,平均得分,最后输出四舍五入保留两位小数,代码如下:

#include <iostream>
#include<iomanip>
using namespace std;
int main(){
	int n;
	double a,b,c,max,min,sum,avg;
	cin>>n;
	cin>>a>>b>>c;
	if(n>=3){
		if(1<=a<=100 & 1<=b<=100 & 1<=c<=100){
			sum=b*n;
			max=sum-a*(n-1);
			min=sum-c*(n-1);
			avg=(sum-max-min)/(n-2);
		}		
	}else{
		avg=0;
	} 
	 //输出保留2位小数 
	cout<<fixed<<setprecision(2)<<avg<<endl;	
	return 0;
}

2022 2 C++评委打分)”有以下相关信息: - **题目描述**:有 n 名评委对小爱的表现打出了分数。已知去掉一个最高分平均得分为 a,不去掉任何分数平均得分为 b,去掉一个最低分平均得分为 c,需计算同时去掉一个最高分及一个最低分后小爱的平均得分。 - **输入格式**:第一行为单个整数表示评委数量 n;第行为三个浮点数表示 a,b 与 c,每个浮点数的数字不超过 88 位。 - **输出格式**:一个浮点数,表示去掉一个最高分及一个最低分之后的平均分,四舍五入保留两位小数。 - **数据范围**:3 ≤ n ≤ 1000,1 ≤ a ≤ b ≤ c ≤ 100。 - **样例数据**:输入为“3 40.00 60.00 85.00”,输出为“70.00”,对应的三名评委打分10.00,70.00,100.00 [^2]。 - **解题思路**:先算出不去掉任何分数的总分,再算出最高分数和最低分数,进而算出同时去掉一个最高分及一个最低分后的平均得分,最后输出四舍五入保留两位小数的结果 [^3]。 - **代码示例**: ```cpp #include <iostream> #include <iomanip> using namespace std; int main(){ int n; double a,b,c,max,min,sum,avg; cin>>n; cin>>a>>b>>c; if(n>=3){ if(1<=a<=100 & 1<=b<=100 & 1<=c<=100){ sum=b*n; max=sum-a*(n-1); min=sum-c*(n-1); avg=(sum-max-min)/(n-2); } }else{ avg=0; } //输出保留2位小数 cout<<fixed<<setprecision(2)<<avg<<endl; return 0; } ``` 另一种代码示例: ```cpp #include <iostream> #include <cstdio> using namespace std; int main() { int n; double a,b,c; cin>>n>>a>>b>>c; double maxn,minn; maxn=n*b-(n-1)*a; minn=n*b-(n-1)*c; printf("%.2f",(n*b-maxn-minn)/(n-2)); return 0; } ``` 还有一种代码示例: ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int n; double a,b,c; cin>>n>>a>>b>>c; a=n*b-(n-1)*a; printf("%.2lf",((n-1)*c-a)/(n-2)); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈工程师Linda

感恩您的鼓励,我会继续创作作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值