枚举算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档