C++实现找出数字重新排列后小于原数的最大正整数
以下是使用 C++ 实现的解决方案: ```cpp #include <iostream> #include <vector> #include <algorithm> // 函数用于找到符合要求的最大正整数 long long findMaxSmallerNumber(long long n) { std::vector<int> digits; long long temp = n; // 将输入的数字 n 的每一位数字存储到向量 digits 中 while (temp > 0) { digits.push_back(temp % 10); temp /= 10; } // 反转向量,使数字的顺序与原数一致 std::reverse(digits.begin(), digits.end()); // 生成所有可能的排列 std::vector<long long> permutations; do { long long num = 0; // 将排列后的数字组合成一个新的整数 for (int digit : digits) { num = num * 10 + digit; } // 如果新数小于原数 n,则将其添加到排列列表中 if (num < n) { permutations.push_back(num); } } while (std::prev_permutation(digits.begin(), digits.end())); // 如果没有找到符合要求的数字,返回 -1 if (permutations.empty()) { return -1; } // 对排列列表进行排序 std::sort(permutations.begin(), permutations.end()); // 返回最大的符合要求的数字 return permutations.back(); } int main() { long long n; // 读取输入的正整数 n std::cin >> n; // 调用函数找到符合要求的最大正整数 long long result = findMaxSmallerNumber(n); // 输出结果 std::cout << result << std::endl; return 0; } ``` ### 代码解释: 1. **数字拆分**:将输入的数字 `n` 的每一位数字存储到向量 `digits` 中。 2. **生成所有排列**:使用 `std::prev_permutation` 函数生成 `digits` 的所有排列,并将每个排列组合成一个新的整数。 3. **筛选符合要求的数字**:筛选出小于原数 `n` 的数字,并将它们存储在 `permutations` 向量中。 4. **返回最大值**:如果 `permutations` 向量不为空,则对其进行排序并返回最大值;否则返回 -1。 ### 复杂度分析: - **时间复杂度**:$O(k!)$,其中 $k$ 是输入数字 `n` 的位数。因为需要生成所有可能的排列。 - **空间复杂度**:$O(k!)$,主要用于存储所有符合要求的排列。 ######[AI问答 | 660点数解答 | 2026-02-14 20:15:14]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)18
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)23
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)320
- 揭秘!任意各位不同三位数经变换最终如何锁定 495 及编程求解变换次数(字节豆包 | 167点数解答 | 2025-04-22 20:47:58)309
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)30
- Python 实现:带边界处理与验证的任意基数数字转换递归程序(字节豆包 | 198点数解答 | 2024-11-21 14:20:25)416
- Python 递归函数实现:将数字转换为指定基数的输出(百度文心 | 499点数解答 | 2024-11-22 09:58:55)316
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)297
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)290
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)265
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)54
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)56