小蓝有很多数字卡片,每张卡片上都是数字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)
标签:10,cnt,卡片,小蓝,1443,2021,now
From: https://www.cnblogs.com/codingsaveWorld/p/18048815