第十四届蓝桥杯大赛软件赛省赛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)
posted @ 2024-03-07 21:39  Nhwite  阅读(185)  评论(0编辑  收藏  举报