题解:洛谷 B4496 数字替换

【题目来源】

洛谷:B4496 [GESP202603 一级] 数字替换 - 洛谷

【题目描述】

Alice 不喜欢数字 \(4\),但觉得数字 \(8\) 寓意好,她想把数中的 \(4\) 全都替换成 \(8\),若数中不含 \(4\) 则无需修改,你能帮帮她吗?

【输入】

输入一行,包含一个整数 \(A\),表示替换前的数。

【输出】

输出一行,包含一个整数 \(B\),表示替换后的数。

【输入样例】

8459045

【输出样例】

8859085

【核心思想】

  1. 问题分析:给定一个整数 \(A\),需要将其十进制表示中所有数字 4 替换为 8,其余数字保持不变。由于替换操作按位独立进行,不涉及进位或数值计算,因此将整数视为字符串逐字符处理是最直接的方案。

  2. 算法选择

    • 字符串逐位替换:将整数读入字符串,遍历每个字符,遇到 4 则替换为 8
  3. 关键步骤

    • 读取输入:将整数 \(A\) 以字符串形式读入 \(S\)
    • 遍历替换:对 \(S\) 的每个字符 \(S_i\)
      • \(S_i = \texttt{`4'}\),则 \(S_i \leftarrow \texttt{`8'}\)
    • 输出结果:输出替换后的字符串 \(S\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(|S|)\),即数字的位数,遍历一次完成所有替换
    • 空间复杂度:\(O(|S|)\),存储输入字符串
  5. 字符串逐位替换的核心思想

    • 数位独立性:每个数字位的替换互不影响,无需考虑数值大小关系或进位,因此字符串处理比数值运算更直接
    • 字符等价性:数字的字符表示('0' ~ '9')与其数值一一对应,替换操作在字符层面即可完成,无需转换为整数
    • 输入输出一致性:以字符串形式读取和输出,避免了整数类型可能导致的位数限制问题(如超长数字),同时简化了逐位访问
    • 单遍历完成:每个字符最多被检查一次、修改一次,无回溯需求,是最优的线性时间处理
    • 适用于数位级别的条件替换、数字变形、字符过滤等基础字符串处理问题

【算法标签】

入门 #语法基础

【代码详解】

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;       // 使用标准命名空间

string a;  // 定义一个字符串变量a,用于存储输入

int main()  // 主函数入口
{
    cin >> a;  // 从标准输入读取一个字符串到变量a中

    // 遍历字符串a的每个字符
    for (int i = 0; i < a.size(); i++)
    {
        // 如果当前字符是'4'
        if (a[i] == '4')
        {
            a[i] = '8';  // 将'4'替换为'8'
        }
    }

    cout << a << endl;  // 输出替换后的字符串
    return 0;  // 程序正常结束
}

【运行结果】

8459045
8859085
posted @ 2026-07-01 16:30  团爸讲算法  阅读(35)  评论(0)    收藏  举报