范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  #头条创作挑战赛#昨天看到这样一个例子,一辆车肇事逃逸,现场有三个目击证人,第一个说我看到车牌的前两位数字一样,第二个说我看到车牌的后两位数字一样,但和前面的数字不同,第三个说车牌的四位数刚好等于一个数的平方。根据以上信息找出符合条件的四位数车牌号。
  书上给出的算法是,首先列举前两位所有可能的数字(从0到9),然后在此基础上列举后两位所有的可能(从0到9),得到所有可能的四位数,再逐一判定这些四位数是否符合条件,条件当然就是该四位数等于某个数的平方。代码如下。import time     #导入time库,测试一下该程序的效率 flog = 0        #设置一个标志,用来判断是否找到目标值 start1 = time.perf_counter()    #记录程序开始运行时间 for i in range(10):        #从0到9枚举所有可能的值,这里是前两位     if flog:               #判断是否找到目标值,如果找到结束循环         break     for j in range(10):    #从0到9枚举后两位所有可能的值         if flog:           #判断是否找到目标值,如果找到结束循环             break         if i != j:         #判断是否满足前两位数不等于后两位,             k = 1000 * i + 100 * i + 10 * j + j #如果符合,给出所有可能的四位数             for temp in range(32, 100): #列举完全平方数是四位数的所有数                 if temp * temp == k:    #判断该四位数是否等于完全平方数                     print(k)            #输出符合条件的四位数                     flog = 1            #把标志设置为已找到                     break               #结束当前循环 end1 = time.perf_counter()    #记录程序运行结束的时间 print(end1 - start1)          #输出程序执行时间
  找到的四位数:7744
  程序运行时间:0.0008686760011187289
  如果没有break,最外层循环将执行10次,每一次外层循环第二层循环都将执行10次,第二层循环执行一次最内层循环将执行68次(100-32=68,循环只在满足外层i不等于第二层j的条件下执行),所以该程序并没有执行10*10*68=6800次,而是10*9*68=6120次。每一层循环都要判断是否找到目标值,找到的话用break终止循环(break只能终止当前层的循环)
  程序运行过程如下:
  i: 0 j: 1 k: 11
  i: 0 j: 2 k: 22
  i: 0 j: 3 k: 33
  ……
  i: 0 j: 9 k: 99
  i: 1 j: 0 k: 1100
  i: 1 j: 2 k: 1122 这里跳过了1111,因为前后不能相等
  ……
  i: 7 j: 4 k: 7744
  7744 如果使用break的话,那么程序运行到此为止。
  i: 7 j: 5 k: 7755
  i: 7 j: 6 k: 7766
  ……
  i: 8 j: 6 k: 8866
  i: 8 j: 7 k: 8877
  i: 8 j: 9 k: 8899
  ……
  i: 9 j: 8 k: 9988
  本题是不是一定要使用三层嵌套循环?能否对程序改进优化呢?  下面尝试从找出的完全平方数中寻找符合条件的答案,也就是从第三个条件出发去找符合第一、二个条件的值,程序如下所示。import time   #导入时间库 p=[i for i in range(4)]   #初始化列表p,p中用来存放可能的四位数中每一位的数值 start=time.perf_counter() #记录程序开始运行时间 for i in range(32,100):   #枚举所有完全平方后是四位数的     t=i*i                 #计算出所有可能的四位数     for j in range(4):    #依次取出组成四位数的每一位数         p[j]=t%(10**(j+1))//(10**j)  #通过求余加整除的方式得出每一位     if p[0]==p[1] and p[2]==p[3] and p[0]!=p[2]: #判断前两位相同,并且后两位相同,并且前后不同的四位数         print(t)          #输出符合条件的四位数         break             #结束循环 end=time.perf_counter()   #记录程序结束时间 print(end-start)          #输出所用时间
  找到的四位数:7744
  程序运行时间:0.0002392329988651909
  如果没有break语句,该程序应该执行272次,外层循环执行68次,每执行一次内层循环执行4次,68*4=272。
  程序还能不能进一步优化改进呢?  还是可以的,借助字符串实现快速查找和比对,而不用执行内循环,代码如下所示。import time   #导入时间库 start=time.perf_counter()  #记录程序开始运行时间 for i in range(32,100):    #依次读取每一个经过完全平方可以得到四位数的值     t=i*i                  #计算得到每一个四位的完全平方数     t1=str(t)              #把四位数值转化为字符串     if t1[0]==t1[1] and t1[2]==t1[3] and t1[0]!=t1[2]: #通过字符切片判断前两位相同,     #后两位相同,但前后不同的数         print(t)           #输出符合结果的四位数         break              #结束循环 end=time.perf_counter()    #记录程序结束时间 print(end-start)           #输出程序运行时间
  找到的四位数:7744
  程序运行时间:4.287200135877356e-05
  这个程序只有一层循环68次,每执行一次都需要使用Python内置的字符串操作,不过运行时间是三个程序中最短的。

凌晨下火车时,游人为何宁愿入住洗浴中心,也不去酒店客房住旅游途中,交通和住宿是我们筹划的重要部分,然而交通会影响住宿。(此处已添加小程序,请到今日头条客户端查看)受时间限制可能下火车要赶在凌晨,这个时间点好多旅客会选择入住洗浴中心,而不离开李晨8年后,张馨予消失了4000万的后花园,比什么都香记得点击关注装个好房子哦每天为你带来装修干货改造新灵感与美好生活故事探寻美好居住方式,我们值得更好的生活!范冰冰的微博营业依旧很勤,如果没有2018年的那场税务风波,她微博里的任何在日本住宿,选择情侣酒店,东西随便用,但有一个要求日本作为我国的邻国,当地除了有着浪漫好看的樱花外,这里还有着优质的服务行业。(此处已添加小程序,请到今日头条客户端查看)随着日本旅游业的快速发展,当地每年也都会吸引成千上万的我国游3种假豆腐里面根本没黄豆,购买时应当注意,建议尽早了解豆腐是生活中比较常见的一种食物,我们都知道豆腐是由大豆制作而成的,并且里面含有丰富的蛋白质和钙元素,适当食用有助于补充体内所缺乏的各种微量元素,特别是对于发育期的青少年和老年人来说智慧之果香蕉的好处这么大!银屑病患者快进来看看香蕉是我们日常生活中经常食用的一种水果,具有很高的营养价值,不仅能够增强免疫力预防或治疗高血压,还能起到减肥的作用。那么,对于银屑病患者来说,食用香蕉是否有益处?香蕉富含多种营养物午休趴桌子睡觉的危害很多上班族或者是学生族都有趴在桌子上睡觉的习惯,但是趴着睡觉对眼睛身体都有很大的危害。1视力模糊因为趴着睡觉眼球受到压迫,午睡后通常会出现暂时性的视力模糊。长时间这样,会造成眼压过炒鸡蛋不能放此物,吃了就是没病找病,现在知道还不晚鸡蛋是最好的蛋白质来源之一,并且每百克鸡蛋中蛋白质含量12。8g,属于高蛋白类食物,蛋白质生物效价为100。硒14。9mg维生素E2。29mg维生素B2含量为0。32mg,除了维生经脉不畅的特效药鸡血藤今天聊聊鸡血藤,名称便能大概联系其外貌的一味药材。是豆科植物密花豆的干燥藤茎。在我国主要分布在广西云南等西南地区。野生为主。鸡血藤一般在秋季冬季采收,将藤茎收集,去除多余的枝叶杂质科学家开发新技术,可使5G系统的频谱带宽翻倍与木材铜或硅不同,拓扑绝缘体(TI)是一种奇特的物质状态。它表面是导电的,但是整体不导电。这种独特的材料特性具有重大的科学意义,可用于一系列技术,包括无线通信雷达和量子信息处理。近张宁新合同,CUBA选秀大会的受益者聊一聊最近闹得沸沸扬扬的张宁新赛季续约合同问题!首先,张宁在2020年8月21日,2020年CBA选秀大会上以首轮第八顺位被山西汾酒职业篮球俱乐部选中,从而进入中国男子篮球职业联赛手机文档直接打印,米家连供打印一体机一键直连全家都能用居家办公,延迟开学,开始网课相信很多家长在看到这类消息时就直接蒙了吧,有学生的家庭也一定被打印这件事困扰过,无论是日常的学习资料,还是彩色健康码行程码都得打印。先别慌,首先我们得积
王炸轰43248!穆雷打崩火箭,交易小马丁吧,伊森赛后太憋屈常规赛揭幕战,老鹰在主场117107击败火箭,也没什么好说的实力相差挺大。本场老鹰和火箭都有需要展示的东西,火箭仍然在观望是否要摆烂,还是去冲一下季后赛。老鹰则需要看看自己梭哈的新CBA喜迎三连胜!首钢队创7年来胜广厦最大分差20日,北京首钢队在联赛第五轮比赛中,以100比76大胜浙江广厦队,这样他们获得三连胜。首钢队这场比赛多点开花,始终保持主动与领先。首钢队已经逐渐走出了赛季前两轮连败的阴影,他们正欧洲最强攻坚战!莱万痛失金球奖拿黄潜泄愤?欧洲最强攻坚战激情上演北京时间10月21日凌晨3点整,西甲第10轮将上演一场焦点战,巴萨坐镇诺坎普迎战比利亚雷亚尔,虽然巴萨在上轮国家德比战丢掉3球,但赛季至今4粒失球在欧洲五大联20日澳门赛,世界冠军爆冷出局!非洲一哥被零封澳门冠军赛正在进行中,欢迎大家评论点赞,耶耶耶耶耶20日男单116决赛已结束五场,全部为外协选手,另还有三场比赛未开打,敬请期待,1830,法尔克VS张本智和1940,樊振东VS黄爆冷王曼昱23出局张本智和一轮游石川佳纯轻松晋级16强北京时间2022年10月20日,WTT澳门冠军赛继续进行,女单赛场,世界冠军王曼昱23不敌法国名将袁嘉楠,爆冷无缘16强。不过,国乒传来一个喜讯,由于阿鲁纳03出局,林高远确定入围演员李小萌穿着46000元的外套做头发,与王雷结婚多年零绯闻李小萌理发师在个人社交平台晒出一组演员李小萌做头发的照片,很快,引起网友们热议。从照片中看,李小萌穿着运动鞋牛仔裤。她一边享受做头发一边拿着手机在自拍,然后理发师也拿着手机帮她拍照头发长度的一点点追忆,我们也很久没见了,不知你是否长发依旧?我亲爱的朋友,8月底放假前,小助理们约了我去做头发,那时我想把头发烫卷,就羊毛卷或大波浪卷那样的。她们已经预约好了理发店,大家也定好28号早上9点集合过去,计划最终变了样,她们最终A股震荡行情应该怎么操作?信创概念股腾飞,何为信创概念?A股震荡行情应该怎么操作A股上午小幅震荡,下午大幅翻红后有继续下跌,盘面上最火的概念赛道信创概念板块强势回归带动下午指数翻红,后续大盘其它权重板块上涨动力不足最后跌幅收盘。对于这种NBA常规赛直播鹈鹕VS篮网(中文)在线高清观看回放录像视频尔瓦拉多,得分越来越稳的大二学生墨菲,季前赛都有惊人的表现。里面还有两对机器,Valianus,所以鹈鹕在攻击中肯定不会吃亏。高清直播戳我看比赛困扰主帅威利格林的是如何成为防守最好情侣酒店40分钟大尺度视频全网疯传!四万人在线围观作者丨酱姨这是酱姨陪你的第1578个夜晚日本作家东野圭吾说世上唯有两样东西不能直视,一是太阳,二是人心。永远不要考验人性,因为有时候看似平静的湖面之下,其实暗藏着巨大的漩涡。国庆假女子白头发日渐增多,别以为是自己老了,可能是缺乏这3种营养比起身体的不适,人们更在意的是自己容貌的变化,很多人可以忍受胃痛,却接受不了自己掉头发,尤其是爱漂亮的女人,一旦发现自己有了白头发,就会格外紧张。随着年龄的增长,长出白头发在所难免