B4066 [GESP202412 三级] 数字替换

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

:::align{center} :::

本题考查一维数组。

使用一维数组存储序列 A,使用擂台法可以在读入的同时计算出序列 A 的最大值和最小值。由于题目中保证了 |a_i|\leq 10^5(即:-10^5\leq a_i\leq 10^5),因此最小值初始化为 100001,最大值初始化为 -100001 即可。这一部分的参考代码:

int maxv = -100001, minv = 100001;
for (int i = 1; i <= n; i++) {
    cin >> a[i];
    maxv = max(maxv, a[i]); //获取序列的最大值
    minv = min(minv, a[i]); //获取序列的最小值
}

接着第二次循环,进行替换操作。根据题意,对于每个 a_i,判断其是否大于 k 或是小于 k,若是则进行对应的替换,随后输出即可。这一部分的参考代码:

for (int i = 1; i <= n; i++) {
    if (a[i] > k) //大于 k 替换为最大值
        a[i] = maxv;
    if (a[i] < k) //小于 k 替换为最小值
        a[i] = minv;
    cout << a[i] << " ";
}