资源简介 (共17张PPT)2.4.2基于枚举算法的问题解决xxxx学校 xxxx老师生活中的枚举导入在一筐水果中找出坏掉的水果扔掉在一串相同的钥匙中找出所有能打开这把锁的钥匙忘记了三位数密码箱的密码一个一个查看,然后去除坏的水果一把一把地试,找到然后取出从000开始,001,002…………找到正确密码后记下来共同点?枚举算法2.4一一列举逐一检验概念:枚举法是依据问题的已知条件,确定答案的大致范围,在此范围内列举出它所有可能情况的方法。(P73)不遗漏不重复检验条件(一)枚举算法的概念及特征枚举算法2.41.找出能同时被7和11整除的1000以内的整数。枚举范围:检验条件:如何用代码写出检验条件:1—1000之间的整数能同时被7、11整除①x%7==0 and x%11==0②x%77==0③x/7==x//7 and x/11==x//11任务一枚举算法2.4一一列举循环结构(for语句、while语句)逐一检验分支结构(if判断语句)(二)枚举算法实现方法枚举算法2.4for(列举所有可能解):if(判断条件):输出解也可以使用while语句实现(二)枚举算法实现方法枚举算法基本框架:枚举算法2.4例:票据中模糊数字推断问题。一张票据上有一个由4位数字组成的编号,甲说数字编号的前两位数字相同,但都不是零;乙说数字编号的后两位数字是相同的,但与前两位不同;丙说数字编号是一个整数的二次方。试根据以上线索推断出编号。(三)如何设计枚举算法枚举算法2.41. 分析问题已知条件:假设4位数字的编号是AABB,其中A≠0,A≠B,且AABB是一个整数的二次方;求解目标:票据中的数字变量A变量B变量k变量c枚举对象 枚举范围 检验条件AB 1—9之间的整数0—9之间的整数A≠Bc*c=k(三)如何设计枚举算法一一列举逐一检验枚举对象 枚举范围 检验条件AB 1—9之间的整数0—9之间的整数A≠Bc*c=k枚举算法2.42. 设计算法import mathfor A in range(1, 10):for B in range (0, 10):if A != B:k = A * 1000 + A * 100 + B * 10 + Bc = int(math.sqrt(k)) # 求票据中数字的平方根并取其整数部分if c * c == k: # 若k是完全平方数,则找到该票据编号print("票据编号是:", k)枚举算法2.43. 编程调试(三)如何设计枚举算法4. 保存文件,运行程序枚举算法2.4(四)枚举算法应用百钱买百鸡问题:公元6世纪,中国的《张丘建算经》有一道著名的百鸡问题:“今有鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,凡百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”枚举算法2.4(四)枚举算法应用已知条件:公鸡5文一只,母鸡3文一只,小鸡3只一文钱变量x变量y变量z求解目标:x,y,z 可能的值分析问题设计算法编程调试保存运行枚举算法2.4(四)枚举算法应用枚举对象 枚举范围 检验条件x 1-20 x+y+z=100x*5+y*3+z/3=100y 1-33 z 1-100 分析问题设计算法编程调试保存运行枚举算法2.4(四)枚举算法应用money=100 #一共100文钱num=100 #一共100只鸡for x in range(1,21): #列举条件一:公鸡只数可能为1-20for y in range(1,【1】): #删除语句中的“【1】”,母鸡只数可能为1-33for z in range(1,【2】): #删除语句中的“【2】”,(3小鸡)只数可能为1-100money1=x*5+y*3+z/3num1=x+y+zif money1==money and num1==num: #检验条件:100文钱是否用完了,买的鸡数量是否有100只print (x,y,【3】) #删除语句中的“【3】”,输出公鸡、母鸡、小鸡的数量input("运行完毕,请按回车键退出...")分析问题设计算法编程调试保存运行可以用枚举算法解决吗破解密码求方程2x+y =9的整数解寻找1000以内的所有素数求方程2x+y =9的正整数解求方程2x+y =9的实数解枚举算法2.4(五)小结枚举算法2.4谢谢聆听 展开更多...... 收起↑ 资源预览