程序中的循环——循环语句实例
破解密码
一个QQ帐号的密码是6位数字,如果想破解这个帐号的密码,同学们有什么办法?
最简单的方法就是一个一个地去试。
利用计算机的快速运算能力,一个一个的去试,需要多久时间呢,展示程序,提问6位数字密码安全吗?
破解程序核心思路:枚举,列举所有可能的密码组合,一一验证,就可以找到正确密码。
枚举法是计算机程序解决问题常用的一个方法。
鸡兔同笼
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
程序方法解题思路
枚举,列举所有可能的组合,一一验证
枚举所有的可能,鸡(a=1 to 35)免(b=1 to 35)
一一验证,a+b=35 且 2a+4b=94
输出结果,Print "鸡"; a;"兔"; b
整理输入语句
Print 35; "只"; 94; "脚"
For a = 1 To 35
For b = 1 To 35
If a + b = 35 And 2 * a + 4 * b = 94 Then Print "鸡"; a;"兔"; b
Next b
Next a
修正程序功能缺点
只能完成35只,94脚的问题求解,如何适应其它情况
如果鸡兔同笼问题中的已知量变成(35,96),(35,98),(35,100)呢,怎么解决?
修改代码?把已知量从代码中取出,放入窗口
提示:引入text1,text2,在窗口中修改已知量
修正程序功能缺点
tou=val(text1.text)
jiao=val(text2.text)
Print tou; "只"; jiao; "脚"
For a = 1 To tou
For b = 1 To tou
If a + b = tou And 2 * a + 4 * b = jiao Then Print "鸡"; a;"兔"; b
Next b
Next a
完善程序功能
如果程序使用者在窗口中输入的已知量是(35,95),(35,160),(35,68)时,为什么没结果显示?
程序错了?
头数和脚数有限制。
2倍头数<脚数<4倍的头数,且脚数为偶数。
2*tou完善程序功能
tou=val(text1.text)
jiao=val(text2.text)
Print tou; "只"; jiao; "脚"
If 2*touFor a = 1 To tou
For b = 1 To to tou
If a + b = tou And 2 * a + 4 * b = jiao Then Print "鸡"; a;"兔"; b
Next b
Next a
Else
Print "此情况无解"
End if
简化层次结构
层次太多,可以通过定义子过程,简化程序层次结构
If 2 * tou < jiao And jiao < 4 * tou And jiao Mod 2 = 0 Then
cc
Else
Print "此情况无解"
End If
Public Sub cc()
For a = 1 To tou
For b = 1 To tou
If a + b = tou And 2 * a + 4 * b = jiao Then Print "鸡"; a;"兔"; b
Next b
Next a
End Sub
补充例题
百元买百鸡问题
今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?
总结
使用FOR语句来解决鸡兔同笼的问题,核心思路是枚举法,列举所有可能一一验证,利用计算机的快速运算能力,很快就能找到答案。
核心语句FOR+IF。
单击此处编辑母版标题样式
单击此处编辑母版副标题样式