C++ 实现:从大整数中删数求最小密码的巧妙算法
# C++实现:删除数字使剩余数最小 以下是解决这个问题的C++实现代码,使用贪心算法思想: ```cpp #include <iostream> #include <string> #include <vector> using namespace std; string findMinNumber(string num, int s) { vector<char> stack; for (char digit : num) { while (!stack.empty() && s > 0 && stack.back() > digit) { stack.pop_back(); s--; } stack.push_back(digit); } // 如果还需要删除更多数字,从末尾删除 while (s > 0 && !stack.empty()) { stack.pop_back(); s--; } // 构建结果字符串 string result; for (char digit : stack) { result += digit; } // 去除前导零 size_t nonZero = result.find_first_not_of('0'); if (nonZero != string::npos) { result = result.substr(nonZero); } else { result = "0"; // 全为零的情况 } return result.empty() ? "0" : result; } int main() { string N; int S; cin >> N >> S; string password = findMinNumber(N, S); cout << password << endl; return 0; } ``` ## 代码说明 1. 使用贪心算法思想,维护一个栈结构 2. 遍历数字字符串,当栈顶数字大于当前数字时弹出栈顶(这样可以确保剩余数字最小) 3. 处理完所有数字后,如果还需要删除更多数字,从末尾删除 4. 最后去除结果中的前导零 ## 测试用例验证 样例输入1: ``` 2813465 4 ``` 输出: ``` 134 ``` (删除2,8,6,5) 样例输入2: ``` 1032 2 ``` 输出: ``` 2 ``` (删除1和0) ## 注意事项 1. 算法时间复杂度为O(n),n为输入数字的位数 2. 需要特别注意前导零的处理 3. 当删除所有数字后剩余零的情况需要特殊处理 ######[AI写代码神器 | 473点数解答 | 2025-06-20 16:08:21]
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)20
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 旅行售货员问题:详细步骤剖析与贪心算法Python代码实现(字节豆包 | 444点数解答 | 2024-12-17 03:32:59)275
- Dev C++ 实现旅行售货员问题:最小路程路线代码与详细解析 (字节豆包 | 448点数解答 | 2024-12-17 03:33:42)175
- C++ 求解 P1020 小核桃与删除字符串问题:双指针与枚举策略 (字节豆包 | 330点数解答 | 2026-02-07 18:40:10)23
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)310
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)327
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)321
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)324
- C语言:按特定顺序读入再输出,含浮点数精确格式处理(字节豆包 | 105点数解答 | 2024-10-08 22:07:29)334
- C++ 混合类型数据格式化输入输出:按指定顺序输出并保留两位小数(字节豆包 | 187点数解答 | 2024-10-16 14:31:08)379
- C语言:实现混合类型数据格式化输入输出,代码超简单!(字节豆包 | 159点数解答 | 2024-10-16 14:32:18)376