大家好,欢迎来到IT知识分享网。
一、题目要求
二、输入输出
输入格式:
在一行中输入0-9为一套的数字卡片的套数。比如:输入3。就表示有3套卡片,其中每一套卡片都含 0 到 9 各 1 张,3套就是30张,最多拼到10。
输出格式:
在一行中输出可以从1拼到的值。
1、样例1:
3
10
2、样例2:
2023
3183
三、题目解析
1.数字卡片演示
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 除0之外,个位1-9各出现一次 | |
10 | 11 | 12 |
13 |
14 | 15 | 16 | 17 | 18 | 19 | 个位0-9各出现一次,十位10个1 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 个位0-9各出现一次,十位10个2 |
…… | ||||||||||
90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 个位0-9各出现一次,十位10个9 |
目前除0在个位少出现1次,在十位少出现10次以外,1-9出现次数相同 | ||||||||||
100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 个位0-9各出现一次,十位10个0,百位10个1 |
110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 个位0-9各出现一次,十位10个1,百位10个1 |
120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 个位0-9各出现一次,十位10个2,百位10个1 |
…… | ||||||||||
990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 个位0-9各出现一次,十位10个9,百位10个9 |
从100到现在,除了0在百位少出现100次外,1-9出现次数相同 | ||||||||||
…… |
2.数字卡片分析
根据上表可知,当数字逐渐增加时,除0以外的数字出现次数逐渐持平,并且持平趋势呈现从数字1向数字9的出现逐渐持平的趋势,也就是说,在数字增大的过程中,小的数字先用,随数字增大,再用大的数字,并逐渐持平(0除外)。但是数字卡片是有限的,所以在拼数字卡片的过程中,如果出现数字卡不足的情况,必然是小的数字卡先不足,即‘1’的数字卡不足。
四、解决问题
1、输入卡片个数
num=int(input())
2.定义一个逐渐增加的数字,代表拼成的数字
i=0
3.一个循环,当还有数字卡片的时候,数字+1
while True:
if(num>=0): #问题1:为什么是>=
i+=1
s=str(i)
n=s.count(‘1’)
num-=n
else:break
4.输出可以拼成的最大数
print(i-1) #问题2:为什么-1
5.问题1:为什么是>=0:
因为1如果恰好用完后暂且不用数字1,改用其他数字,这时候其他数字卡片是有余额的,所以数字还可以再次增加。
6.问题2:为什么-1:
因为前面的条件是num>=0,当num=0时,数字卡片用光了,但如果下一个数字还会用到数字1,这个时候的数据会比需要的数据大一个。
五、运行代码
num=int(input()) i=0 while True: if(num>=0): i+=1 s=str(i) n=s.count('1') num-=n else:break print(i-1)
六、提交结果
七、最后的话
如果有错误,感谢各位大佬评论区指出,想要讨论的话可以留言。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149897.html