青训营X豆包MarsCode技术训练营 | 豆包MarsCode Al 刷题

46 阅读3分钟

《小U的数字插入问题解析》 题目: 小U的数字插入问题 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。 你需要帮助小U找到这个插入位置,输出插入后的最大结果。 测试样例 样例1: 输入:a = 76543, b = 4 输出:765443 样例2: 输入:a = 1, b = 0 输出:10 样例3: 输入:a = 44, b = 5 输出:544 样例4: 输入:a = 666, b = 6 输出:6666 解题代码: #include #include using namespace std;

int solution(int a, int b) {     // 将数字转换为字符串     string strA = to_string(a);     string strB = to_string(b);         // 初始化最大结果     string maxResult = strA;         // 遍历插入位置     for (int i = 0; i <= strA.length(); i++) {         // 尝试在位置 i 插入 strB         string newResult = strA.substr(0, i) + strB + strA.substr(i);                 // 比较新生成的字符串与当前最大字符串         if (newResult > maxResult) {             maxResult = newResult;         }     }         // 将最大字符串转换回整数并返回     return stoi(maxResult); }

int main() {     cout << (solution(76543, 4) == 765443) << endl;     cout << (solution(1, 0) == 10) << endl;     cout << (solution(44, 5) == 544) << endl;     cout << (solution(666, 6) == 6666) << endl;     return 0; } 一、解题思路

本题旨在将非负整数  b  插入正整数  a  的某个位置以获取最大数字,核心思路是利用字符串操作遍历所有可能插入位置并比较大小。把数字  a  和  b  先转换为字符串形式,方便在不同位置插入操作。通过循环依次尝试在  a  字符串的每个字符前(包括开头和结尾,共  strA.length() + 1  个位置)插入  b  对应的字符串  strB ,生成新字符串  newResult ,再与当前记录最大结果的字符串  maxResult  比较,保留较大值,循环结束后, maxResult  即为所求最大数字对应的字符串,最后转回整数输出。

二、代码详解

1. 数字转字符串: string strA = to_string(a);  和  string strB = to_string(b); ,借助  to_string  函数(C++ 11特性),轻松将整型变量  a 、 b  转为字符串类型,便于后续按字符位置灵活处理。 2. 初始化与循环遍历: string maxResult = strA;  先设最大结果初始值为  a  对应的字符串,之后  for (int i = 0; i <= strA.length(); i++)  循环,涵盖  a  字符串所有可插入点,从开头到结尾依次操作。 3. 插入生成新串并比较: string newResult = strA.substr(0, i) + strB + strA.substr(i);  里, substr  函数按索引提取子串,前半部分提取  0  到  i - 1  字符,拼接  strB  再加上后半部分  i  位置起剩余字符,形成新插入组合。 if (newResult > maxResult)  依字典序比较字符串大小,若  newResult  更大,则更新  maxResult 。 4. 结果转换返回:循环结束, return stoi(maxResult);  用  stoi  函数把最终最大结果字符串转回整型返回,完成任务。

三、总结知识点

1. 字符串与数字转换: to_string  和  stoi  函数使用频繁,实现整型与字符串型相互转化,应对需精细处理数字每位字符场景,如本题按位插入操作。 2. 字符串操作函数: substr  按起止索引截字符串子串,助于灵活拼接、重组字符串,是文本处理常用操作,构建新数字组合不可或缺。 3. 遍历与比较逻辑:遍历数组、字符串常见,循环结合条件判断找最优解,这里遍历插入点并比较字符串大小,体现暴力求解思路,穷举可能获最大结果,虽简单直接,但要留意效率,大规模数据时复杂度高,可按需优化,像先分析数字特征缩小区间再遍历。此题目融合基础类型转换、字符串处理、逻辑判断,是编程基础运用典范,助夯实代码能力。