赞
踩
请求出在 12345678(含) 至 98765432(含) 中,有多少个数中完全不包含 2023 。
完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023 。
例如 20322175,33220022 都完全不包含 2023,而 20230415,20193213 则
含有 2023 (后者取第 1, 2, 6, 8 个数位) 。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
拿到题目之后(摩拳擦掌),首先仔细分析(仔细审题):
1,数据范围:【12345678,98765432】是个闭区间,因此循环中必须包含到头尾(粗心的同学自己拿出小本本记好!!千万不要丢三落四),
2,完全不包含2023:
1,“2023” 不在这个数字之中,也就是说:“2023” not in str(nums),这是最容易想到的一种情况(如果是大题的话可以骗分,毕竟肯定可以通过某些样例的,敲黑板+手动狗头)。
2,“无论将这个数的哪些数位移除都不能得到 2023”:只是通过移除某些数字,因此,不存在将数字位进行调换的情况
3,通过移除某些数字位无法得到“2 0 2 3”:也就是说,在移除某些数字位之后,2,0,2,3必须按照顺序出现,类似于2032这种将不符合题目要求,这是比较关键的一点(敲黑板)
题目分析完之后,拿出我们最擅长的工具(python!!!)进行解剖,按照题目意思,最先想到的肯定是最简单粗暴地字符串遍历方法,由于这只是一道填空题,暴力也不失为一种不错的方法,但是这里需要注意一个重要的点,这决定到你是否可以完整的给出答案!(敲黑板)
当你掏出 str.find() 函数准备迎敌的时候,仅仅知道 str.find(target) 这是完完全全不够的,当你满怀信心的写完这部分代码并发现它是四个嵌套循环的时候,然后发现范围大的就算是跑一个小时也跑不完的时候(下一题!),这里重点就来了(敲黑板准备做笔记),那就是 str.find 函数完整的结构应该是:
是的没错!find函数还可以指定查找的范围!所以完整的思路就来了!
我们只需要定义一个函数,作用就是将传进来的数字进行不断查找,并且每次查找的范围都在上一个已经找到的字符之后,比如:第一个 “2” 出现的位置下标识2.那么下一个 “0” 就可以从2+1=3的下标位置开始查找,其余元素同理;再根据find函数的特性,如果没有查找到该元素,返回的将是 -1 ,再次敲黑板(逻辑思维要跟上),根据题目意思,只要“2 0 2 3”这几个数字一个都没有出现或者没有按照顺序出现,则这个数就是我们的目标!!!(注意要求,是完全不包含2023的数,思维跟上!)因此,我们只需要设置四个if判断,只要上一个find函数返回值为 -1 直接得到目标数字!!!
综合整理以上思路,定义的函数如下:
- def find2023(nums):
- s = str(nums) # 将传入的数字转换成字符串
- first = s.find("2") # 查找第一个 “2” 出现的位置
- if first == -1: # 不在nums中
- return False
- sec = s.find("0",first+1) # 在nums中,从后一个继续查找下一个元素 “0” ,之后的思路以此类推
- if sec == -1:
- return False
- thi = s.find("2",sec+1)
- if thi == -1:
- return False
- four = s.find("3",thi+1)
- if four == -1:
- return False
- return True # 通过所有的if,那么这个数包含2023
完整的代码如下:
- import os
- import sys
-
- # 请在此输入您的代码
- def find2023(nums):
- s = str(nums) # 将传入的数字转换成字符串
- first = s.find("2") # 查找第一个 “2” 出现的位置
- if first == -1: # 不在nums中
- return False
- sec = s.find("0",first+1) # 在nums中,从后一个继续查找下一个元素 “0” ,之后的思路以此类推
- if sec == -1:
- return False
- thi = s.find("2",sec+1)
- if thi == -1:
- return False
- four = s.find("3",thi+1)
- if four == -1:
- return False
- return True # 通过所有的if,那么这个数包含2023
- if __name__=="__main__":
- count = 0 # 设置计数器
- for i in range(12345678,98765433):
- res = find2023(i) # 将数字传入函数进行判断
- if not res: # 不包含2023,目标数字!!!
- count += 1
- print(count)
最后的结果:(这里是直接print上面代码运行的结果,直接运行时间真的不够用!!!)
以上就是本文的全部内容啦,如果你有更好更妙的解法和看法,欢迎评论区留言!最后祝各位15届蓝桥杯取得好成绩!!!(撒花撒花撒花)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。