《《枚举算法》第一课时课件.ppt》由会员分享,可在线阅读,更多相关《《枚举算法》第一课时课件.ppt(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、枚举算法老师前几天刚配了几把家里钥匙,不慎混入了一堆钥匙中,无法用外观去分辨,老师该怎么找到家里的钥匙呢?枚举算法枚举算法枚举(穷举)算法就是按问题本身的性质,枚举(穷举)算法就是按问题本身的性质,一一列举一一列举出该问题所有可能的解,并在逐一出该问题所有可能的解,并在逐一列举的过程中,列举的过程中,检验每个可能解检验每个可能解是否是问题是否是问题的真正解,若是,采纳这个解,否则抛弃它。的真正解,若是,采纳这个解,否则抛弃它。做到既做到既不遗漏不遗漏任何一个解、也任何一个解、也不重复不重复1、一一列举:、一一列举:2、检验每个可能解:、检验每个可能解:循环结构循环结构 for next选择结构
2、选择结构 if 老师所住小区的每幢楼都有一个电子老师所住小区的每幢楼都有一个电子密码锁,老师只记得它是一个密码锁,老师只记得它是一个4位数,位数,既是既是135的倍数,又是的倍数,又是185的倍数,你的倍数,你能帮老师解开这个锁吗?能帮老师解开这个锁吗?1001 10029998 9999jj是是135的倍数的倍数If j Mod 135=0 and j mod 185=0 then符合条件,输出符合条件,输出j,计数器,计数器+11000For j=1000 to 9999 j是是185的倍数的倍数j mod 135=0j mod 185=0j mod 135=0 and j mod 185
3、=0开始开始计数器置初值:计数器置初值:c0J在在10009999?J是否是是否是135和和185倍数?倍数?输出输出j计数器计数器c=c+1YYN输出:计数器输出:计数器c的值的值结束结束NDim c as integer,j As Integerc=0For j=1000 to 9999If j mod 135=0 and j mod 185=0 Thenc=c+1List1.AddItem jEnd IfNext jList1.AddItem 共有共有&c&种可能种可能例例:一份单据被涂抹的数字的推算。一份单据被涂抹的数字的推算。问题:一张单据上有一个问题:一张单据上有一个5 5位数位数
4、的编号,其的编号,其百位百位数和十位数数和十位数处已经变得模糊不清,如图所示。但处已经变得模糊不清,如图所示。但是知道这个是知道这个5 5位数是位数是3737或或6767的倍数。现在要设计的倍数。现在要设计一个算法,找出所有满足这些条件的一个算法,找出所有满足这些条件的5 5位数。并位数。并统计这些统计这些5 5位数的个数。位数的个数。000102 0398 991 1、一一列举该问题所有可能的解、一一列举该问题所有可能的解JFor j=0 to 99 For j=0 to 99 2、检验每个可能解是否是问题的真正解、检验每个可能解是否是问题的真正解这个这个5位数是位数是37或或67的倍数的倍
5、数N MOD 37=0 OR N MOD 67=0n=25006+j*10n开始开始计数器置初值:计数器置初值:C0J0J100?N 25006+J*10N是是37的倍数的倍数或或是是67的倍数?的倍数?计数器计数器C计数计数C C+1输出:真正解输出:真正解N的值的值J J+1YYN输出:计数器输出:计数器C的值的值结束结束N开始开始计数器置初值:计数器置初值:C0J0J100?N 25006+J*10N是是37的倍数的倍数或或是是67的倍数?的倍数?计数器计数器C计数计数C C+1输出:真正解输出:真正解N的值的值J J+1YYN输出:计数器输出:计数器C的值的值结束结束NPrivate Sub Command1_Click()End SubDim C,N,J As IntegerC=0J=0For j=0 to 99N=25006+J*10If N Mod 37=0 Or N Mod 67=0 ThenC=C+1List1.AddItem Str(n)End IfNext jList1.AddItem 总计有总计有+Str(c)+个五位数个五位数本课小节枚举算法的关键(1)一一列举 循环结构(2)逐个检验 选择结构(3)有时效率不高,可以算法优化