酷代码 AI
菜单
服务商

编程实现 老师在黑板上写了一个不超过 500 500 位的整数 n n( 1 ⩽ n < 10 500 1⩽n<10 500 ),要求同学们擦掉其中任意 k k 个数字,剩余数字的顺序不变,希望得到的数最大。 例如: n = 69134 n=69134, k = 2 k=2,从 69134 69134 中擦掉 2 2 个数字;从左往右,将第一个位置的 6 6 和第三个位置的 1 1 擦掉,变成的新数 934 934 是最大的。 image 输入描述 输入两个整数 n n 和 k k( 1 ⩽ n < 10 500 , 0 ⩽ k < n 1⩽n<10 500 ,0⩽k<n 的位数),整数之间以一个空格隔开。 输出描述 输出一个整数,表示擦掉 k k 个数字后,得到的最大数。

以下是使用 Python 实现该功能的代码: ```python # 读取输入 n, k = input().split() k = int(k) # 将数字 n 转换为字符列表 digits = list(n) # 进行 k 次删除操作 while k > 0: i = 0 # 找到第一个满足 digits[i] < digits[i + 1] 的位置 while i < len(digits) - 1 and digits[i] >= digits[i + 1]: i += 1 # 删除该位置的数字 digits.pop(i) k -= 1 # 去除前导零 result = ''.join(digits).lstrip('0') # 如果结果为空,说明结果是 0 if result == '': result = '0' # 输出结果 print(result) ``` 代码解释: 1. 读取输入:通过 `input().split()` 读取用户输入的两个整数 `n` 和 `k`,并将 `k` 转换为整数类型。 2. 将数字转换为字符列表:将输入的数字 `n` 转换为字符列表 `digits`,方便进行删除操作。 3. 进行删除操作:循环 `k` 次,每次找到第一个满足 `digits[i] < digits[i + 1]` 的位置 `i`,并删除该位置的数字。 4. 去除前导零:使用 `lstrip('0')` 去除结果字符串的前导零。 5. 处理结果为空的情况:如果去除前导零后结果为空,说明结果是 0,将结果设为 `'0'`。 6. 输出结果:打印最终结果。 复杂度分析: - 时间复杂度:$O(k * m)$,其中 $m$ 是数字 `n` 的位数。 - 空间复杂度:$O(m)$,主要用于存储数字 `n` 的字符列表。 [2026-02-07 20:33:37 | AI问答 | 456点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多