第十四届蓝桥杯大赛软件赛省赛Python 《2023》
问题描述
请求出在12345678(含)至98765432(含)中,有多少个数中完全不包含2023
完全不包含2023是指无论将这个数的哪些数位移除都不能得到2023。例如20322175,33220022都完全不包含2023,而20230415,20193213则含有2023(后者取第1、2、6、8个数位)。
解答过程
先算出包含2023的数的个数,再对'2','0','2','3'进行匹配判断。
count = 0
for i in range(12345678, 98765433):
a = str(i).find('2')
if a != -1:
b = a + str(i)[a:].find('0')
if b != a-1:
c = b + str(i)[b:].find('2')
if c != b-1:
d = c + str(i)[c:].find('3')
if d != c-1:
count += 1
print(98765433-12345678-count+1)
这段代码中通过一个一个找满足条件的下标来找到包含2023的数的个数,循环中每次x变化都要加上原来的x是因为使用index方法获取的下表是切割后新列表的下标。
然后只需输出
print(98765433 - 12345678 - count)
即可求出完全不包含2023的数的个数
师夷长技
def find(n):
k = 0
for num in range(12345678,98765433):
str1 = ["2","0","2","3"]
for x in str(num) :
if x in str1:
if str1[0] == x:
str1.pop(0)
if len(str1) != 0:
k+=1
print(k)
print(85959030)