《枚举算法.docx》由会员分享,可在线阅读,更多相关《枚举算法.docx(3页珍藏版)》请在优知文库上搜索。
1、枚举算法一、定义:枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,假设是,我们采纳这个解,否那么抛弃它。在列举的过程中,既不能遗漏也不应重复。通过生活实例,理解枚举算法的定义,找出枚举算法的关键步骤及注意点1 .在枚举算法中往往把问题分解成二局部:(1) 一一列举:这是一个循环结构。要考虑的问题是如何设置循环变量、初值、终值和递增值。循环变量是否参与检验。(要强调本算法的主要是利用计算机的运算速度快这一特点,不必过多地去做算法优化工作。)(2)检验:这是一个分支结构。要考虑的问题是检验的对象是谁?逻辑判数后的二个结果该如何处理?
2、2 .分析出以上二个核心问题后,再合成:要注意循环变量与判断对象是否是同一个变量。3 .该算法的输入和输出处理:输入:大局部情况下是利用循环变量来代替。输出:一般情况下是判断的一个分支中实现的。用循环结构实现一一列举的过程,用分支结构实现检验的过程,理解枚举算法流程图的根本框架。二、算法实例【例5】.求I-I(X)O中,能被3整除的数对该问题的分析:(1)从I-IoOO列举,这是一个循环结构(2)在循环中对每个数进行检验。但凡能被3整除的数,打印输出,否那么继续下一个数。【例6】.找出1,1000中所有能被7和11整除的数本例参照上例,修改其中的判断局部。【例7】.一张单据上有一个5位数的编号
3、,万位数是L千位数时4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。【例8】一张单据上有一个5位数的编号,万位数是L千位数时4,十位数是7,个位数和百位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。【例9】.找水仙花数(假设三位数X=IOoa+10b+c,满足a3+b3+c3=x,那么X为水仙花数)IF1J10.百鸡百钱问题(公鸡5元,母鸡3元,1元3只小鸡花100元钱,买100只鸡,怎么买?)【例5】.求100O中,能被3整除的数。【例61找出1,1000中所有能被7和11整除的数。【例7】.一张单
4、据上有一个5位数的编号,万位数是1,千位数时4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。【例8】一张单据上有一个5位数的编号,万位数是1,千位数时4,十位数是7,个位数和百位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。【例9】.找水仙花数(假设三位数X=IoOa+10b+c,满足a3+b?+c3=x,那么X为水仙花数)【例10.百鸡百钱问题(公鸡5元,母鸡3元,1元3只小鸡花100元钱,买100只鸡,怎么买?)【例5】程序代码:i=lDowhilei=1000Ifi3=INT(i3)thenpr
5、intiEndifi=i+lEnddo【例6】可以用二种方法实现。方法一:ifi7Int(i7)thenIfill=Int(ill)thenPrintiEndifEndif方法二:ifi7=Int(i7)andi/1l=Int(il1)thenPrintiEndif【例7】程序代码:j=ODoWhilej100n=14700+jIfnMod57=0OrnMod67=0ThenPrintnEndIfJ=J+11.oop【例8】程序代码:j=0DoWhilej10i=0DoWhilei10n=14070+i*100+jIfnMod57=0OrnMod67=0ThenPrintnEndIfi=i+1Loopj=j+1Loop【例9】.程序代码:i=100DoWhilei=999a=i100b=(iMod100)10c=iMod10Ifi=a*a*a+b*b*b+c*c*cThenPrintii=i+11.oop【例10】程序代码:x=0DoWhileX=20y=0DoWhiley=100-xz=100-x-yIf(x*5+y*3+z3=100)And(zMod3=0)ThenPrintx,y,zEndIfy=y+1Loopx=x+11.oop