《枚举算法-高中信息技术教科版(2019)必修1.pptx》由会员分享,可在线阅读,更多相关《枚举算法-高中信息技术教科版(2019)必修1.pptx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二单元 编程计算2.4 可以复用的代码例1 逢7跳过游戏:第1位同学从1开始数起,依次每人尽快数下一个数,凡是遇到7的倍数(如7、21等)或是数字中带7的数字(如17、71等),就要喊“过”说错或卡住了即被淘汰,这样一直数到100为止。一、枚举算法算法分析把问题所有的可能解一一列举出来,并对每一个可能解进行判断,是真正解的时候输出“过”例1 逢7跳过游戏:第1位同学从1开始数起,依次每人尽快数下一个数,凡是遇到7的倍数(如7、21等)或是数字中带7的数字(如17、71等),就要喊“过”说错或卡住了即被淘汰,这样一直数到100为止。一、枚举算法一、枚举算法这种算法就叫做“枚举算法”,又称为“穷
2、举法”算法思想:把问题的所有的可能解一一列举出来,并对每一个可能解进行判断,以确定是否是问题的真正解。逢7跳过游戏一一列举:1100逐个检验:是7的倍数或包含77的倍数个位为7十位为7for i in range(1,101):i%7=0i%10=7i/10=7一、枚举算法利用枚举算法思想解决问题:1、确定枚举范围11002、明确检验条件是7的倍数或包含73、编程求解一、枚举算法例2、求解被墨水密码1、确定枚举范围812000812990求解密码,小明有一张藏宝图,上面有宝藏开启的密码,但是他不小心打翻了墨水,导致十位和百位模糊不清了,幸好藏宝图有提示:该密码是31或187的倍数,且十位是奇数
3、。2、明确检验条件是31或187的倍数,且十位是奇数for i in range(812000,812991,10):if i%31=0 i%187=0 i/10%2!=0:一、枚举算法例2、求解被墨水密码1、确定枚举范围812000812990求解密码,小明有一张藏宝图,上面有宝藏开启的密码,但是他不小心打翻了墨水,导致十位和百位模糊不清了,幸好藏宝图有提示:该密码是31或187的倍数,且十位是奇数。2、明确检验条件是31或187的倍数,且十位是奇数for i in range(812000,812991,10):if i%31=0 i%187=0 i/10%2!=0:or()and一、枚举
4、算法例2、求解被墨水密码结论:尽可能使罗列的范围最小,选择最优化的方法100991一、枚举算法例3、求生肖1、确定枚举范围zodiac=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪编写程序,实现输入一个人的出生年份,程序计算并输出他对应的生肖。如输入2023,结果输出为“兔”2、明确检验条件index=(year-1900)%12print(zodiacindex)一、枚举算法例3、求生肖拓展1、确定枚举范围zodiac=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪编写程序,实现输入一个人的出生年份,程序计算并输出他对应的生肖,直到输入0结束。2、明确检验条件index=(year-190
5、0)%12print(zodiacindex)一、枚举算法例4、水仙花数1、确定枚举范围100-1000输出1000以内的所有水仙花数。水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:13+53+33=1532、明确检验条件每个位上的数字的3次幂之和等于它本身:a=i%10for i in range(100,1000):个位 十位 百位b=i/10%10c=i/100if a*3+b*3+c*3=i:一、枚举算法例5、完数1、确定枚举范围1-1000一个数如果恰好等于它的真因子(即除了自身以外的约数)之和,这个数就称为“完数”,例如6=1+2+3。编程输出1000以内
6、的所有完数。2、明确检验条件一个数如果恰好等于它的真因子之和a=0for i in range(1,1001):for j in range(1,i):a=a+jif i%j=0:1、设定变量,存放真因子之和2、利用循环,计算真因子之和3、判断真因子之和是否和该数相等if a=i:一、枚举算法例5、鸡兔同笼问题1、确定枚举范围heads=35Legs=94兔数量:1-heads-1编程解决:今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?2、明确检验条件鸡和兔的总脚数之和等于94leg=tu*4+(heads-tu)*2for tu in range(1,heads):if legs=leg:1、求当前兔子数量下鸡和兔的总脚数2、判断脚数是否相等一、枚举算法小结1.枚举算法的基本思想:一一 列举,逐个检验2.尽可能使罗列的范围最小,选择最优化的方法3.可以借助列表实现枚举算法谢谢聆听