首页 > 其他分享 >[传智杯 #4 初赛] 竞争得分 题解

[传智杯 #4 初赛] 竞争得分 题解

时间:2022-11-26 15:35:34浏览次数:75  
标签:得分 传智杯 min int 题解 初赛 最小值 maxn max

题目传送门

这道题主要考察的是 "打擂台" 算法,

也就是求最大或求最小值。

就像这样:

if (x > maxn) maxn = x;

也可以写成这样:

maxn = max(maxn, x);

最小值同理。

然而光求出最大最小值还不行,还必须求出每个人更新后的得分,计算方法题目已经给我们了,如下:

\[100 \times \frac{a_i-a_{min}}{a_{max}-a_{min}} \]

最后注意一个点,题目原文说:

由于成绩系统的问题,最终录入的成绩只能是整数,采用直接去掉小数部分的方法。

所以最后直接强转成 int 即可。

最后贴上代码

#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main() {
	int n;
	double a_max = -1e9, a_min = 1e9; // 分别代表最大值与最小值,也要注意是 double 类型,否则计算结果是整数。
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		if (a[i] > a_max) a_max = a[i]; // 求最大值。
		if (a[i] < a_min) a_min = a[i]; // 求最小值。
	}
	for (int i = 1; i <= n; i++) cout << (int)(100 * ((a[i] - a_min) / (a_max - a_min))) << " "; // 直接套公式,注意强转 int 。
	return 0; // 最后收尾。
}

总结:

易错点只有最后要强转成 int 一个,其他的并不需要特别注意。

标签:得分,传智杯,min,int,题解,初赛,最小值,maxn,max
From: https://www.cnblogs.com/xvl-/p/16927490.html

相关文章