课件25张PPT。寻宝之旅
——枚举算法寻宝之旅 在澳大利亚,有一个名为洛豪德的小岛。相传岛上藏有无数财宝,周围海底也铺满耀眼炫目的宝石。
谁来驾驶桐高珍珠号呢?选船长规则选4位同学,第1位同学从1开始数起,依次每人尽快数下一个数,凡是遇到7的倍数(如7、21等)或是数字中带7的数字( 如17、71等),就要喊“船长”,说错或卡住了即被淘汰,这样一直数到99为止, 剩下同学就为船长。
算法分析把问题所有的可能解一 一列举出来,并对每一个可能解进行判断,是真正解的时候输出“船长” 。算法分析把问题所有的可能解一 一列举出来,并对每一个可能解进行判断,是真正解的时候输出“船长” 。算法分析把问题所有的可能解一 一列举出来,并对每一个可能解进行判断,是真正解的时候输出“船长” 。枚举算法这种算法就叫做“枚举算法”,又称为“穷举法”。
算法思想:把问题的所有的可能解一 一列举出来,并对每一个可能解进行判断,以确定是否是问题的真正解。
逐个检验:一一列举:1~99是7的倍数或数字中包含7n=0:i=输出nN结束开始i≤99i=i+1计数输出“船长”1输出i循环结构
嵌套
选择结构枚举算法的流程图枚举算法的控制方式循环结构(复习)
For 循环变量=初值 to 终值 step 步长
语句块
Next 循环变量选择结构(复习)
If 条件表达式 then
语句块
End If循环结构嵌套选择结构
For 循环变量=初值 to 终值 step 步长
If 条件表达式 then
语句块
End If
Next 循环变量利用枚举算法思想解决问题:1.确定枚举范围
2.明确检验条件
3.选择控制方式
4.编程求解1到99之间循环结构嵌套选择结构是7的倍数或数字中包含7是7的倍数或数字中包含7用代码如何表示?
是7的倍数:_____________
数字中包含7:
个位是7 或者 十位是7
________ or _________i mod 7=0
i mod 10=7i10=7 船长带领大家很快来到了岛上,可是岛上的门太多了,到底是哪一个呢?于是船长打开了藏宝图。 “哈哈,这可难不倒我”,船长很快找到了通往宝藏城堡的大门,大门在说话:“请输入密码,最多三次!” 密码是什么呢?还好,藏宝图上还有提示:六位密码,是31或187的倍数,可是十位和百位已经模糊不清了。812??0请输入密码,最多三次!
1.确定枚举范围
2.明确检验条件
3.选择控制方式
4.编程求解812000~812990循环结构嵌套选择结构是31或187的倍数利用枚举算法思想解决问题:812??0六位密码,是31或187的倍数,可是十位和百位已经模糊不清了编程求解Dim i As Long, n As Integer, c As Integer
n = 0 '存储循环次数
c = 0 '存储解的个数
For i = 812000 To 812990 '设置循环变量的初值、终值、步长
n = n + 1
If i Mod 31 = 0 And i Mod 187 = 0 Then '设置条件表达式
List1.AddItem Str(i)
c = c + 1
End If
Next i
Label1.Caption = "循环次数:" + Str(n)
Label2.Caption = "满足条件的解的个数" + Str(c)调试程序,使之能输出正确的三个解
方法一Dim i As Long, n As Integer, c As Integer
n = 0 '存储循环次数
c = 0 '存储解的个数
For i = 812000 To 812990 Step 10 '设置循环变量的初值、终值、步长
n = n + 1
If i Mod 31 = 0 Or i Mod 187 = 0 Then '设置条件表达式
List1.AddItem Str(i)
c = c + 1
End If
Next i
Label1.Caption = "循环次数:" + Str(n)
Label2.Caption = "满足条件的解的个数" + Str(c)方法二n = 0 '存储循环次数
c = 0 '存储解的个数
For i = 812000 To 812990 '设置循环变量的初值、终值、步长
n = n + 1
If (i Mod 31 = 0 Or i Mod 187 = 0) And i Mod 10 = 0 Then '设置条件
List1.AddItem Str(i)
c = c + 1
End If
Next i
Label1.Caption = "循环次数:" + Str(n)
Label2.Caption = "满足条件的解的个数" + Str(c)比较结论:
尽可能使罗列的范围最小,选择最优化的方法方法一的循环次数是( )次
方法二的循环次数是( )次100991得到结果 一共得到3个解,船长输入了密码,门马上就开了。812200812510812820历经艰难,终于来到了藏宝之地,最珍贵的宝物就藏在城堡的中心,可是只有闯关成功才能打开?
重量是一个五位数,万位和十位数不知,最高位是奇数,且该五位数同时为14和16的倍数,找出可能的解。
猜猜城堡的重量?17?8方法一1.确定枚举范围
2.明确检验条件
十位罗列0到9之间
万位罗列1到9之间最高位是奇数,且该五位数同时为14和16的倍数方法二1.确定枚举范围
2.明确检验条件
11708~91798最高位是奇数,且该五位数同时为14和16的倍数?17?8费了九牛二虎之力,终于打开了,可是城堡瞬间融化了,变成了几个字:世间本有千万宝藏,只是并不属于我们,我们能够拥有的就是努力,拥有一颗不断上进的心,就能拥有无尽的财富!课堂小结枚举算法的基本思想:一一列举,逐个检验
尽可能使罗列的范围最小,选择最优化的方法
编程时采用循环结构嵌套选择结构的控制方式
为了安全,尽量把密码设得复杂一些Thank You!