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

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内置的字符串操作,不过运行时间是三个程序中最短的。

不给面子!伊藤张本智和或无缘乒超联赛,刘国梁好心没得到好报我们国内的乒超联赛将于下月初举行,此前乒协对外发公告,邀请世界排名前50的外协会选手来乒超打比赛。截止到现在,还没有俱乐部官宣哪位外协会选手来华比赛。如果没有外协会选手的加盟,那乒给年轻人的求职就业参考,西安效益和收入最好的企业名单西安是传统工业重镇,得益于国家政策红利,聚集了众多实力派企业,也是目前在陕效益和收入相对最好的,网上看到这份名单,我们转载于此,供大家求职就业参考。1能源化工行业,以延长陕煤两个世一周内送了三次温暖,马刺与波波维奇才是湖人和詹姆斯的真爱两年前还是总冠军的湖人突然间就掉到连附加赛都进不去的位置,本赛季更是已经彻底没戏,队内矛盾不断,还受到伤病侵袭,球队连败之际,詹姆斯却突然受伤,戴维斯暴君崛起,詹姆斯迅速归来,奈何赛季新高生涯新高!湖人143138马刺疯狂一战创多项纪录北京时间11月27日,NBA常规赛今天继续进行,在刚刚结束的一场焦点战中,湖人战胜马刺取得客场两连胜,在这场可以说几乎没有强度的比赛中,两队创造了多项纪录,不是赛季新高就是生涯新高吸取潮州车祸事件教训,解决特斯拉既当运动员又做裁判员的问题在潮州车祸事件中,车主质疑车辆存在刹车失灵,特斯拉拿出后台数据则回应称,数据显示车主全程未踩刹车。看起来,特斯拉似乎更有理有据。在这场对峙中,特斯拉除了作为运动员外,还扮演了裁判的11月27日NBA常规赛爵士vs太阳全场录像好球体育讯北京时间11月27日,NBA常规赛继续激战,其中主场作战的菲尼克斯太阳以113112击败了犹他爵士,迎来4连胜,而爵士队则是遭遇4连败。艾顿贡献了29分20篮板,而布克2不会穿搭,直接挑选三件套,一样美出天际洋气炸街套装女秋季设计感小众衬衫粗花呢马甲可盐可甜职业两件套2022秋季新款可盐可甜炸街三件套女洋气减龄时尚西装马甲短裤套装名媛小香风马甲短裤衬衫时尚炸街套装女韩版格子毛呢洋气三两世界杯日本队6分,看别人脸色!7分,稳保晋级16强日本晋级世界杯有多难,首先看一下第一轮过后E组积分西班牙队3分,进球7个,小组排名第1。日本队3分,进球2个,小组排名第2。德国队0分,进球1个,小组排名第3。哥斯达黎加队0分,没寓教于乐!带孩子来宝山这座科技馆,解锁更多有趣玩法在长江与黄浦江汇流处,有一座展馆外形犹如一条跃动的鱼,它就是全国首家以河口科技为主题的专业展馆上海长江河口科技馆。这座集河口自然科学科研科普人文等于一体的科技馆,是带着孩子增长知识资治通鉴赏析孙膑效力齐国,用围魏救赵之计实现一举多得图片来自互联网孙膑的人生可谓充满着凶险,在魏国,他因为师兄弟庞涓的嫉妒而被加害,命是保住了,却被砍断了双脚,并在脸上刺字,几乎成为废人。然而孙膑命不该绝,当齐国使者来到魏国时,他的长安十二时辰大唐不夜城等获2022年度文旅最佳创新成果11月23日,文旅部公示2022年度文化和旅游最佳创新成果名单,长安十二时辰大唐不夜城唐文化全景展示创新实践建筑可阅读上海文旅融合创新实践舞蹈诗剧只此青绿的创新实践3项文旅项目获奖
现役巨星生涯缺席场次,老詹165场,伦纳德348场,库里和哈登呢NBA舞台竞争激烈,所以对于球员来说,出勤率是一个巨大的考验。强如罗伊姚明和麦迪,都是公认的天才,但最终都遭遇大伤,生涯并不长久。联盟也有不少玻璃人,他们很难打完一个完整的赛季。而AC米兰惨败于拉齐奥,只因为新老板太穷?文羊城晚报全媒体记者刘毅传统豪门AC米兰延续低迷状态,1月25日在意甲第19轮最后一场比赛中客场以0比4惨败于拉齐奥,今年遭遇连续五场正式比赛不胜。AC米兰上一场在意大利超级杯以0阿里巴巴把全球总部搬去新加坡可能吗?消息会是真的吗?我真不会相信!不敢相信!绝不相信!我认真查了又查,也没有查任何阿里巴巴全球总部,要搬去新加坡去的可靠消息。都是一些小道消息。没有一个可靠的消息。阿里巴巴香港股票里也中国人还在过年,世界局势却发生了巨变,印度伊朗捅刀俄罗斯俄乌冲突仍在继续,且丝毫没有要画上句号的倾向,与此同时,以美国为首的北约国家,正准备为乌克兰提供新的军事帮助。在局势不容乐观的情况下,俄罗斯对美国释放了强硬信号。1月23日,梅德韦库兹马谈彩虹穿搭现象级穿搭因为我今天拿了30分直播吧1月25日讯NBA常规赛,奇才127126险胜独行侠。赛后库兹马接受了采访。谈到本场赛前自己的彩虹穿搭,库兹马用现象级的(phenomenal)一词来形容自己的穿搭。当被问到连线2023直面新挑战聚焦全球通胀走势通胀峰值与利率水平或高于当前预测视频加载中南方财经全媒体记者施诗上海报道近期通胀似乎已经见顶。展望未来,通胀是否将继续回落?2023年哪些因素将影响通胀的表现?我们一起来听一听专家们的观点。连线嘉宾芝商所首席经济三星全球首款触控一体OLED屏于1月量产,首发搭载GalaxyBookUltraGalaxyBookUltra作为三星旗下旗舰高端创作笔记本电脑的迭代产品,将于2月1日三星举办的新品发布会上与三星GalaxyS23系列一同推出。近日,有关于GalaxyBook莫言对已经发生的事接受改变或离开莫言尽量少为已经发生的事情而后悔,永远抬头挺胸向前看,人生有三把钥匙,接受改变或离开,不能接受的就改变,改变不了的就离开,请相信一切都是最好的安排,不管你正经历着什么,开心或难过,我国唯一的沙漠小镇塔中镇塔克拉玛干沙漠位于新疆南部的塔里木盆地,是我国最大的沙漠,也是世界第二大流动沙漠,东西长约1000公里,南北宽约400公里,占地面积33万平方公里,相当于三个江苏省的面积,塔克拉玛不信美联储加息也不信全球衰退!当前市场是不是乐观过头了?美联储会否停止加息全球经济会否陷入衰退是今年一大未知数,而对于这两个问题,当前市场十分乐观。尽管美联储主席鲍威尔曾多次强调货币紧缩政策对于抑制通胀十分必要,经济学家也频频警告202金融大势头部机构暴雷频现后,加密货币全球强监管能否实现?2023年伊始,受到去年多家加密机构破产倒闭等影响,多国监管机构先后发声。当地时间1月3日,美联储联邦存款保险公司(FDIC)与货币监理署(OCC)发布联合声明,强调加密资产相关风