小蓝有很多数字卡片,每张卡片上都是数字0到9。
小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就
不能用来拼其它数了。
小蓝想知道自己能从1拼到多少。
例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,
但是拼11时卡片1已经只有一张了,不够拼出11。
现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。

  • 模拟法
  • 统计法

模拟法
直接模拟题目的操作过程,每拼一个数,就把对应的卡片去掉,如果找不到卡片,就停止。

a = [2021 for i in range(10)]

def check(x):
    while (x > 0):
        now = x % 10
        if a[now] > 0:
            a[now] -= 1
        else:
            return False
        x = x // 10  # 移动位数
    return True

cnt = 0
while (check(cnt)):  # 0的时候会多加一个cnt
    cnt += 1
print(cnt - 1)

统计一的个数

cnt = 0 # 用来计算1用了几次
for i in range(1,10000):
  cnt += str(i).count('1') 
  if cnt == 2021:
    break
print(i)
posted on 2024-03-02 17:14  逢考必过好吗秋梨膏  阅读(4)  评论(0编辑  收藏  举报