城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Python实现枚举算法一波三折的优化

11月11日 楚倾云投稿
  头条创作挑战赛昨天看到这样一个例子,一辆车肇事逃逸,现场有三个目击证人,第一个说我看到车牌的前两位数字一样,第二个说我看到车牌的后两位数字一样,但和前面的数字不同,第三个说车牌的四位数刚好等于一个数的平方。根据以上信息找出符合条件的四位数车牌号。
  书上给出的算法是,首先列举前两位所有可能的数字(从0到9),然后在此基础上列举后两位所有的可能(从0到9),得到所有可能的四位数,再逐一判定这些四位数是否符合条件,条件当然就是该四位数等于某个数的平方。代码如下。importtime导入time库,测试一下该程序的效率flog0设置一个标志,用来判断是否找到目标值start1time。perfcounter()记录程序开始运行时间foriinrange(10):从0到9枚举所有可能的值,这里是前两位ifflog:判断是否找到目标值,如果找到结束循环breakforjinrange(10):从0到9枚举后两位所有可能的值ifflog:判断是否找到目标值,如果找到结束循环breakifi!j:判断是否满足前两位数不等于后两位,k1000i100i10jj如果符合,给出所有可能的四位数fortempinrange(32,100):列举完全平方数是四位数的所有数iftemptempk:判断该四位数是否等于完全平方数print(k)输出符合条件的四位数flog1把标志设置为已找到break结束当前循环end1time。perfcounter()记录程序运行结束的时间print(end1start1)输出程序执行时间
  找到的四位数:7744
  程序运行时间:0。0008686760011187289
  如果没有break,最外层循环将执行10次,每一次外层循环第二层循环都将执行10次,第二层循环执行一次最内层循环将执行68次(1003268,循环只在满足外层i不等于第二层j的条件下执行),所以该程序并没有执行1010686800次,而是109686120次。每一层循环都要判断是否找到目标值,找到的话用break终止循环(break只能终止当前层的循环)
  程序运行过程如下:
  i:0j:1k:11
  i:0j:2k:22
  i:0j:3k:33
  i:0j:9k:99
  i:1j:0k:1100
  i:1j:2k:1122这里跳过了1111,因为前后不能相等
  i:7j:4k:7744
  7744如果使用break的话,那么程序运行到此为止。
  i:7j:5k:7755
  i:7j:6k:7766
  i:8j:6k:8866
  i:8j:7k:8877
  i:8j:9k:8899
  i:9j:8k:9988
  本题是不是一定要使用三层嵌套循环?能否对程序改进优化呢?下面尝试从找出的完全平方数中寻找符合条件的答案,也就是从第三个条件出发去找符合第一、二个条件的值,程序如下所示。importtime导入时间库p〔iforiinrange(4)〕初始化列表p,p中用来存放可能的四位数中每一位的数值starttime。perfcounter()记录程序开始运行时间foriinrange(32,100):枚举所有完全平方后是四位数的tii计算出所有可能的四位数forjinrange(4):依次取出组成四位数的每一位数p〔j〕t(10(j1))(10j)通过求余加整除的方式得出每一位ifp〔0〕p〔1〕andp〔2〕p〔3〕andp〔0〕!p〔2〕:判断前两位相同,并且后两位相同,并且前后不同的四位数print(t)输出符合条件的四位数break结束循环endtime。perfcounter()记录程序结束时间print(endstart)输出所用时间
  找到的四位数:7744
  程序运行时间:0。0002392329988651909
  如果没有break语句,该程序应该执行272次,外层循环执行68次,每执行一次内层循环执行4次,684272。
  程序还能不能进一步优化改进呢?还是可以的,借助字符串实现快速查找和比对,而不用执行内循环,代码如下所示。importtime导入时间库starttime。perfcounter()记录程序开始运行时间foriinrange(32,100):依次读取每一个经过完全平方可以得到四位数的值tii计算得到每一个四位的完全平方数t1str(t)把四位数值转化为字符串ift1〔0〕t1〔1〕andt1〔2〕t1〔3〕andt1〔0〕!t1〔2〕:通过字符切片判断前两位相同,后两位相同,但前后不同的数print(t)输出符合结果的四位数break结束循环endtime。perfcounter()记录程序结束时间print(endstart)输出程序运行时间
  找到的四位数:7744
  程序运行时间:4。287200135877356e05
  这个程序只有一层循环68次,每执行一次都需要使用Python内置的字符串操作,不过运行时间是三个程序中最短的。
投诉 评论 转载

老铁好,这款华为Mate40是我最好用的一款智能手机华为Mate40是两年前的一款5G智能手机,我就买了一款,那我就介绍这款手机的特点。手机屏幕与处理器华为Mate40屏幕是6。5英寸的68度曲面屏,它的屏幕类型是全……冬天的闲时光开心诵读敬请聆听冬天的闲时光文:沙漠飞鹰诵:福开心冬日里的时光总会惹起一点莫名的思念不似秋思那般深沉却比秋思更耐人寻味这思念包裹着冬的一……半城美食半城瓷,江西火辣好吃的小城藏不住了来源:寻味星球最近,阿球发现一个新宝藏。宝藏到什么程度呢?图虫创意大概就是朋友圈好多人跑去逛吃,收获一片好评。每人都大包小包扛回来瓷制餐具、茶具、饰品。……耗时7。5小时一双手,完成了1800块积木拼装还记得千年榫营造积木天坛纪念版的祈年殿么?它是由爱其科技推出的一款榫卯结构的积木,874个零件拼起来还是有一定难度的,记得当初拼的时候,肝了一整晚,耗时近5个小时拼了出来。……金陵春梦一一南京(四)(游记)头条创作挑战赛五、朝天宫朝天宫位于南京市水西门内,是保存完整的明清式古建筑群落。最早可追溯到春秋时期,吴王夫差在此冶铁铸剑,后历代帝王多在此建寺庙、宫殿,名字数次更……大佬勿进,萌新请进俗话说:十年磨一剑这款游戏已经出来了十几年,当年玩游戏的小孩子已经成为了一个父亲或者为生活而奋斗的人,小编也是从08年在网吧看到这款游戏,然后一直玩,虽然断断续续的但是我一直很……Python实现枚举算法一波三折的优化头条创作挑战赛昨天看到这样一个例子,一辆车肇事逃逸,现场有三个目击证人,第一个说我看到车牌的前两位数字一样,第二个说我看到车牌的后两位数字一样,但和前面的数字不同,第三个说车牌……过敏性鼻炎来了,你中招了吗?济南市民族医院治未病科副主任中医师惠宁过敏性鼻炎也叫变应性鼻炎,临床表现主要是以鼻子痒、打喷嚏、嗅觉下降、鼻塞为主,除了引起以上症状,还是小儿鼾症、咳嗽、甚至哮喘的主要原……两年内狂跌4。7万亿!腾讯帝国究竟是如何一步步走到如今的?头条创作挑战赛导读截止到10月18日,腾讯股票收盘价为254。4港元,市值2。44万亿,而在一年前2021年的2月时候,腾讯的股价最高达到了峰值749港币,市值7。2万亿……事关国产EUV,日本光刻胶巨头泼冷水,ASML却不同意台积电在美建芯片厂之后,又选择去日本建厂,一方面是因为日方将会提供近一半的补贴,另一方面也非常关键,那就是台积电想利用日本在芯片制造材料方面的优势。日本原来在半导体方面很……赖亚文确定出山!已成女排世锦赛领队,蔡斌指挥权或已被架空北京时间9月19日,中国女排世锦赛的球员,已经悉数前往比赛场地,从上海走时候,我们也发现了一个事情,赖亚文是本次世锦赛的领队,之前在集训场地,就有人拍摄到赖亚文的身影,如今来说……正负值全队第三,易建联成广东男篮赢球功臣,用智慧锁死新疆神塔10081,广东男篮在常规赛第八轮大比分战胜了赛季初表现不俗的新疆男篮。这场比赛,广东男篮其实面临着很多困难。球队的四号位主力任骏飞在上一场遭遇伤病,本场也是缺席了比赛。……
四大基本力之万有引力袁泉真是美出了高度,把简单的衬衫穿出了独特的韵味vivoX70t上架开卖,处理器从联发科天玑1200换成三星人民日报金句摘抄4七绝南山游胥口镇幼开展关爱儿童,法育未来特色活动蒲公英2天内可以杀死98癌细胞,是科学还是谣言?别不放在心上太阳系的形成兰蔻菁纯双萃安瓶精华,一毫升一百元,妥妥的富婆快乐水新能源发力,吉利11月销售汽车超14万辆传闻扰动果链歌尔涨停,立讯被曝试产高端iPhoneIP地址和子网划分的概述ampampamp5
人民财评推陈出新,夜经济扮靓春节假期2020微信团队可以得圣诞帽吗?微信圣诞帽制作教程小鬼是股风视频监控系统安装全过程怀孕期间开除如何赔偿怎么做蛋肠粉周大福为什么每个店折扣不一样热评聚热点网 家庭客厅怎么布置风水最好家庭客厅布置风水最好的方法音乐节该怎样穿?参考COACHELLA音乐节三大流行时尚穿搭最全常见皮肤病图谱附口服外用联用药9个可能会造成女生私处瘙痒的原因一定要重视九江房产案应不应该与错换人生28年案合并起来一道庭审?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁