1023 组个最小数分数

1023 组个最小数

分数 20

全屏浏览题目

切换布局

作者 CAO, Peng

单位 Google

给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558
counts = input().split()  # 获取输入的每个数字的数量
result = []  # 存储最终结果

# 处理特殊情况:找出第一个非零数字并添加到结果中
for i in range(1, 10):
    if int(counts[i]) > 0:
        result.append(str(i))
        counts[i] = str(int(counts[i]) - 1)
        break

# 添加剩余的数字到结果中
for i in range(10):
    result.extend([str(i)] * int(counts[i]))

# 输出最小的组合数
print(''.join(result))

n = input().split()

# 构建数字串
num_strs = []
for i in range(len(n)):
    num_strs.extend([str(i)] * int(n[i]))

# 找到最小非零数字的索引
min_index = 0
while num_strs[min_index] == '0':
    min_index += 1

# 输出最小数
print(num_strs[min_index], end="")

# 输出剩余数字
for i in range(min_index):
    print(num_strs[i], end="")
for i in range(min_index + 1, len(num_strs)):
    print(num_strs[i], end="")

当用户输入一个由数字 0-9 的个数构成的列表时,代码首先将其以空格为分隔符进行拆分,并存储在变量 `n` 中。

接下来,用一个循环遍历 `n` 列表中的每个元素。对于当前索引位置 `i` 的元素,使用 `int(n[i])` 将其转换为整数类型,并重复字符 `str(i)` 这么多次。然后,把生成的字符序列添加到 `num_strs` 列表中。

之后,我们需要找到字符串中最小非零数字的索引。通过初始化 `min_index` 变量为 0,然后使用一个循环判断 `num_strs[min_index]` 是否等于 '0'。如果相等,则说明该位置上的数字是 0,继续递增 `min_index`,直至找到第一个不为 0 的数字。

现在我们已经确定了最小非零数字在整个字符串中的位置。下一步是按照题目要求输出结果。

首先,使用 `print()` 函数并指定参数 `end=""` 来打印出最小数(`num_strs[min_index]`),即最小非零数字。

接着,我们使用两个循环来打印位于最小数之前和之后的数字。第一个循环从索引 0 到 `min_index-1`,逐个打印位于最小数之前的数字。第二个循环从 `min_index+1` 到 `num_strs` 的长度,逐个打印位于最小数之后的数字。

通过这些步骤,我们可以得到问题要求的组成的最小数。

 

在这个代码片段中,[str(i)] * int(n[i]) 的目的是生成一个包含重复元素的列表。

  • int(n[i]):对于给定输入列表 n 中的第 i 个元素,使用 int() 函数将其转换为整数类型。
  • str(i):将当前索引位置 i 转换为对应的字符串表示。
  • [str(i)] * int(n[i]):创建一个新的列表,其中包含重复的字符序列,该字符序列由当前索引位置 i 的字符串形式组成,并且重复次数等于对应元素值(即根据 int(n[i]))。

举个例子来说,假设我们有以下输入列表 n[3, 2, 1]

  • 第一个元素是 3。经过操作后,会生成一个包含三个 '0' 的列表:['0', '0', '0']
  • 第二个元素是 2。这样会生成一个包含两个 '1' 的列表:['1', '1']
  • 第三个元素是 1。最终会生成一个包含一个 '2' 的列表:['2']

现在,我们需要将上述结果通过 extend() 方法添加到 num_strs 列表中。逐个添加,最终得到的 num_strs 是:['0', '0', '0', '1', '1', '2']
 

这段代码是一个简单的数字处理程序,它的主要功能是将输入的数字列表转换为一个数字串,并且找到该数字串中最小的非零数字,并输出。下面是代码的解释:

  1. 第一行代码 n = input().split() 获取用户输入的一行字符串,并使用 split() 方法将其分割为一个数字列表。例如,如果用户输入 "12345",则 n 的值为 ['1', '2', '3', '4', '5']

  2. 接下来的代码使用一个循环来构建数字串 num_strs。循环从 0 到列表 n 的长度,对于每个索引 i,将数字 i 重复 n[i] 次,并将其添加到 num_strs 列表中。例如,如果 n 的值为 ['1', '2', '3', '4', '5'],则 num_strs 的值为 ['0', '1', '1', '2', '2', '2', '3', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '5']

  3. 下一部分代码用于找到最小非零数字的索引。使用一个 while 循环,判断 num_strs[min_index] 是否为零。如果是零,则将 min_index 加一,继续判断下一个元素,直到找到第一个非零元素的索引位置。

  4. 然后,使用 print(num_strs[min_index], end="") 输出最小的非零数字。end="" 参数是为了在输出时不换行。

  5. 最后两个循环用于输出剩余的数字。第一个循环从 0 到 min_index,输出 num_strs 中索引小于 min_index 的元素;第二个循环从 min_index + 1len(num_strs),输出 num_strs 中索引大于 min_index 的元素。

总而言之,这段代码的功能是将输入的数字列表转换为数字串,并输出其中最小的非零数字及剩余数字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼金术士2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值