这道题主要考察的是 "打擂台" 算法,
也就是求最大或求最小值。
就像这样:
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
一个,其他的并不需要特别注意。