枚举算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
枚举算法
一、定义:
枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。在列举的过程中,既不能遗漏也不应重复。
通过生活实例,理解枚举算法的定义,找出枚举算法的关键步骤及注意点1.在枚举算法中往往把问题分解成二部分:
(1)一一列举:
这是一个循环结构。要考虑的问题是如何设置循环变量、初值、终值和递增值。循环变量是否参与检验。(要强调本算法的主要是利用计算机的运算速度快这一特点,不必过多地去做算法优化工作。)
(2)检验:
这是一个分支结构。要考虑的问题是检验的对象是谁?逻辑判数后的二个结果该如何处理?
2.分析出以上二个核心问题后,再合成:
要注意循环变量与判断对象是否是同一个变量。
3.该算法的输入和输出处理:
输入:大部分情况下是利用循环变量来代替。
输出:一般情况下是判断的一个分支中实现的。
用循环结构实现一一列举的过程,用分支结构实现检验的过程,理解枚举算法流程图的基本框架。
二、算法实例
【例5】.求1-1000中,能被3整除的数
对该问题的分析:
(1)从1-1000一一列举,这是一个循环结构
(2)在循环中对每个数进行检验。
凡是能被3整除的数,打印输出,否则继续下一个数。
【例6】.找出[1,1000]中所有能被7和11整除的数
本例参照上例,修改其中的判断部分。
【例7】.一张单据上有一个5位数的编号,万位数是1,千位数时4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。
【例8】一张单据上有一个5位数的编号,万位数是1,千位数时4,十位数是7,个位数和百位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。
【例9】.找水仙花数(若三位数x=100a+10b+c,满足a3+b3+c3=x,则x为水仙花数)
【例10】.百鸡百钱问题(公鸡5元,母鸡3元,1元3只小鸡花100元钱,买100只鸡,怎么买?)
【例5】.求1-1000中,能被3整除的数。
【例6】.找出[1,1000]中所有能被7和11整除的数。
【例7】.一张单据上有一个5位数的编号,万位数是1,千位数时4,百位数是7,个位数、十位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。
【例8】一张单据上有一个5位数的编号,万位数是1,千位数时4,十位数是7,个位数和百位数已经模糊不清。该5位数是57或67的倍数,输出所有满足这些条件的5位数的个数。
【例9】.找水仙花数(若三位数x=100a+10b+c,满足a3+b3+c3=x,则x为水仙花数)
【例10】.百鸡百钱问题(公鸡5元,母鸡3元,1元3只小鸡花100元钱,买100只鸡,怎么买?)
【例5】程序代码:
i=1
Do while i<=1000
If i/3=INT(i/3) then
print i
End if
i=i+1
End do
【例6】可以用二种方法实现。
方法一:if i/7<>Int(i/7) then
If i/11=Int(i/11) then
Print i
End if
End if
方法二:if i/7=Int(i/7) and i/11=Int(i/11) then
Print i
End if
【例7】程序代码:
j = 0
Do While j < 100
n = 14700 + j
If n Mod 57 = 0 Or n Mod 67 = 0 Then Print n
End If
j = j + 1
Loop
【例8】程序代码:
j = 0
Do While j < 10
i = 0
Do While i < 10
n = 14070 + i * 100 + j
If n Mod 57 = 0 Or n Mod 67 = 0 Then
Print n
End If
i = i + 1
Loop
j = j + 1
Loop
【例9】.程序代码:
i = 100
Do While i <= 999
a = i \ 100
b = (i Mod 100) \ 10
c = i Mo
d 10
If i = a * a * a + b * b * b + c * c * c Then Print i
i = i + 1
Loop
【例10】程序代码:
x = 0
Do While x <= 20
y = 0
Do While y <= 100 - x
z = 100 - x - y
If (x * 5 + y * 3 + z \ 3 = 100) And (z Mod 3 = 0) Then Print x, y, z
End If
y = y + 1
Loop
x = x + 1
Loop