枚举算法课件浙教版高中信息技术必修1_第1页
枚举算法课件浙教版高中信息技术必修1_第2页
枚举算法课件浙教版高中信息技术必修1_第3页
枚举算法课件浙教版高中信息技术必修1_第4页
枚举算法课件浙教版高中信息技术必修1_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.3.2枚举算法问题:

票据编号为5位,最后2位磨损了,请复原可能的数值,该票据编号正好满足规律票据数值为24的倍数(1)如何解决(2)范围?24300——24399(3)条件?(合成新的5位数,是否票据数值=开头24的倍数)(4)用自然语言总结(将24300——24399范围里的数,一个一个试,如果票据数值是24的倍数,就输出)(5)术语讲解,数就是枚举对象、范围对应枚举范围、条件对应验证条件foriinrange(24300,24400):#确定枚举范围 ifi%24==0: #验证条件 print(‘可能的编号为:’,i)问题:

票据编号为5位,百位和十位磨损了,请复原可能的数值,该票据编号正好满足规律票据数值为37的倍数(1)如何解决?算法描述一下(2)枚举对象(3)枚举范围?37007——37997且个位不变(4)验证条件?是否票据数值=开头37的倍数foriinrange(37007,37998,10):#确定枚举范围 ifi%37==0: #验证条件 print(‘可能的编号为:’,i)foriinrange(24300,24400):#确定枚举范围 ifi%24==0: #验证条件 print(‘可能的编号为:’,i)小结:

枚举法解决问题的思路小结:

枚举法解决问题的思路(1)三要素:枚举对象、范围、验证条件(2)算法特征:一一列举,逐个验证(3)程序结构:循环语句嵌套分支结构。通过循环一一列举该问题所有可能的解,在循环内逐一判断对象是否有问题真正的解,若是,则采用,否则不采用,然后下一轮。拓展提升:优惠券发放。家居广场酬宾活动发放优惠券,计划共发放y(假定为10000)元,优惠券包含的面值分别为[100,500,1000],计划100元不多于1000张,500元不多于200张,1000元不多于100张,且发放的不同金额票据张数要是10的整数倍,问可以有多少种发放方式?枚举对象?

100的数量、500的数量、1000的数量枚举范围?

0<=100元的数量<=1000,

0<=500元的数量<=100,

0<=1000元的数量<=100验证条件?

(总金额等于要发放的金额,金额票据单数要是10的整数倍importtimesum=int(input(‘优惠券总发放金额为:’))start=time.time() #记录开始时间foriinrange(0,1001): #100元枚举范围forjinrange(0,201): #500元枚举范围forminrange(0,101):#1000元枚举范围num=i*100+j*500+m*1000

ifnum==sumandi%10==0andj%10==0andm%10==0:

print(‘100元’,i,‘单’,‘500元’,j,’单’,1000元’,m,’单’)end=time.time()#记录结束时间print(‘结束’,‘耗时’,end-start,’s’)foriinrange(0,1001,10): forjinrange(0,201,10): forminrange(0,101,10):优化:方案1中仅设置最大枚举范围,可以根据条件进-步减小枚举范围,每个间隔为10。foriinrange(0,1001,10): forjinrange(0,201,10): forminrange(0,101,10):foriinrange(0,1001): forjinrange(0,201): forminrange(0,101):思考:还可以继续优化吗?减少枚举次数foriinrange(0,1001,10): forjinrange(0,201,10): forminrange(0,101,10):foriinrange(0,1001): forjinrange(0,201): forminrange(0,101):foriinrange(0,1001,10): forjinrange(0,201,10):

m=(sum-i*100-j*500)/1000总结:通过规律(限制条件),可以进一步优化算法,来提高运行效率基于枚举算法的问题解决1、枚举算法基本思想

(一一列举、逐个校验)2、枚举要素(枚举对象

枚举范围

验证条件)3、枚举算法程序结构(循环、嵌套、分支)课堂小结练习:

输出50-100之间是7的倍数或者包含数字7的数,并输出一共有几个数count=0foriin

:if

:print(i,end='')

#填空3print("一共找到"+str(count)+"个符合条件的数")i%7==0ori%10==7ori//10==7range(50,101)count+=11000以内素数查找,代码如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论