酷代码 AI
菜单

小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 s,其中 s 仅包含小写英文字母及数字,且包含至少一个 1∼9 中的数字。小 X 希望小 R 使用 s 中的任意多个数字,按任意顺序拼成一个正整数。注意:小 R 可以选择 s 中相同的数字,但每个数字只能使用一次。 例如,若 s 为 1a01b,则小 R 可以同时选择第 1,3,4 个字符,分别为 1,0,1,拼成正整数 101 或 110;但小 R 不能拼成正整数 111,因为 s 仅包含两个数字 1。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。 你需要帮助小 R 求出他能拼成的正整数的最大值。 输入 输入的第一行包含一个字符串 s,表示小 X 给小 R 的字符串。 输出 输出一行一个正整数,表示小 R 能拼成的正整数的最大值。 样例输入 复制 290es1q0 样例输出 复制 92100 提示 【样例 2 解释】 s 包含数字 2,9,0,1,0。可以证明,小 R 拼成的正整数的最大值为 92100。 设 ∣s∣ 为字符串 s 的长度。对于所有测试数据,保证: 1≤∣s∣≤10 6 ; s 仅包

从字符串 `s` 中提取所有数字字符,然后按降序排列,得到一个最大的数字序列。 但要注意,如果数字序列以 `0` 结尾,则不是最大正整数,因为末尾的 `0` 会降低数值。 为了得到最大正整数,需要确保最后一位不是 `0`。 如果所有数字都是 `0`,则直接输出 `0`。 否则,将最小的非零数字移到末尾,其余数字按降序排列。 步骤: 1. 提取所有数字字符。 2. 统计数字中 `0` 的个数和非零数字的个数。 3. 如果非零数字个数为 0,则输出 `0`。 4. 否则,将非零数字按降序排列,然后将一个最小的非零数字移到末尾,其余非零数字保持降序,最后接上所有的 `0`。 示例: `s = "290es1q0"` 提取数字:`['2', '9', '0', '1', '0']` 非零数字:`['2', '9', '1']`,降序:`['9', '2', '1']` 最小的非零数字 `'1'` 移到末尾,得到 `['9', '2', '0', '0', '1']` 合并:`"92001"` 但这样不是最大,因为 `"92100"` 更大。 实际上,正确做法是: 将所有数字降序排列:`['9', '2', '1', '0', '0']` 如果末尾是 `'0'`,则从后往前找到第一个非零数字,将它移到末尾之前的所有 `0` 前面。 更简单的方法: 降序排列后,如果最后一位是 `0`,则找到最小的非零数字,将它放到末尾,其余保持降序。 即:降序排列后,从末尾向前找到第一个非零数字,将它和最后一个非零数字交换位置。 正确算法: 1. 提取所有数字,按降序排列。 2. 如果最后一位不是 `0`,直接输出。 3. 如果最后一位是 `0`,找到最小的非零数字(即降序排列中最后一个非零数字),将它移到所有 `0` 之前。 代码实现: ```python s = input().strip() digits = [ch for ch in s if ch.isdigit()] digits.sort(reverse=True) if digits[-1] != '0': print(''.join(digits)) else: # 找到最小的非零数字 for i in range(len(digits) - 1, -1, -1): if digits[i] != '0': # 将 digits[i] 移到末尾 result = digits[:i] + digits[i+1:] + [digits[i]] print(''.join(result)) break ``` [2026-01-05 12:09:53 | AI问答 | 647点数解答]

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