luogu-B4066 [GESP202412 三级] 数字替换
GESP三级真题,一维数组相关题目,难度★★☆☆☆。
luogu-B4066 [GESP202412 三级] 数字替换
题目要求
题目描述
小杨有一个包含 个数字的序列 ,即 ,他想将其中大于 的数字都替换为序列的最大值,将其中小于 的数字都替换为序列的最小值,请你帮他计算出替换后的序列。
输入格式
第一行包含两个正整数 ,含义如题面所示。
第二行包含 个数字,代表序列 。
输出格式
输出 个整数,代表替换后的结果。
输入输出样例 #1
输入 #1
5 0
-2 -1 0 1 2
输出 #1
-2 -2 0 2 2
说明/提示
对于全部数据,保证有 ,。
题目分析
解题思路
本题的解题思路如下:
输入处理:
- 读取序列长度n和基准值k
- 读入n个整数构成序列A
核心逻辑:
- 在读入序列的同时找出序列中的最大值和最小值
- 遍历序列中的每个数字:
- 如果数字大于k,替换为最大值
- 如果数字小于k,替换为最小值
- 等于k的数字保持不变
- 按顺序输出处理后的序列
复杂度分析:
- 时间复杂度:,只需要遍历一次序列
- 空间复杂度:,需要存储长度为n的序列
{% include custom/custom-post-content-inner.html %}
示例代码
#include <cmath>
#include <iostream>
int main() {
// 声明变量n和k,分别表示序列长度和比较基准值
int n, k;
std::cin >> n >> k;
// 声明数组ary存储序列,并初始化最大值最小值变量
int ary[n];
int min_n = 100001; // 初始化为一个较大的值
int max_n = -100001; // 初始化为一个较小的值
// 读入序列并同时找出最大值和最小值
for (int i = 0; i < n; i++) {
std::cin >> ary[i];
min_n = std::min(min_n, ary[i]); // 更新最小值
max_n = std::max(max_n, ary[i]); // 更新最大值
}
// 遍历序列进行替换并输出
for (int i = 0; i < n; i++) {
if (ary[i] > k) {
ary[i] = max_n; // 大于k的数替换为最大值
} else if (ary[i] < k) {
ary[i] = min_n; // 小于k的数替换为最小值
}
std::cout << ary[i] << " "; // 输出处理后的数
}
return 0;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on