题目大意
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
用卡片拼数字,拼过的卡片不能再用,有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1拼到多少?
解题思路
比较容易的模拟,我们从 1 开始枚举, 每次检查剩下的卡片能不能拼出这个数字就好。
我们是怎么把一个数在 10 进制下每个位置的数字求出来呢?很简单对吧,先 对 10 取模,个位上的数字就求出来了,再除以 10 ,原本十位上的数字就变到了个位上,再对 10 取模…依次进行下去就求出来了。把当前拼的这个数每一位都拆出来,看看那个数字的卡片还够不够,不够的话就说明拼不了,这时候退出循环,所以最多拼到上一个数。
最终答案:3181。
参考代码(Python):
# 方法一
a = [2021 for i in range(10)]
def check(x):
while x > 0:
now = int(x % 10)
if a[now] > 0:
a[now] -= 1
else:
return False
x = x // 10
return True
cnt = 1
while check(cnt):
cnt += 1
print(cnt - 1)
# 方法二
num = 0
for i in range(1,10000):
num += str(i).count('1')
if num > 2021:
break
print(i - 1)
参考代码仅供学习记录用,各位有更好的想法欢迎评论区补充。