3.16 枚举算法及其程序实现
——新鸡兔同笼
例:鸡兔同笼——解析法
Private Sub Command1_Click()
h Val(text1.Text)
l Val(text2.Text)
r (l-2*h)/2
c h – r
Label1.caption str(c )
Label2.caption str(r)
End Sub
用 “穷举”的方式解决
方法:
³ 当兔子是1 ,鸡则是h-1 ,脚为?=1*4+(h-1)*2
³ 当兔子是i ,鸡则是h-i ,脚为?
找到则退出循环
h val(text 1.Text)
l val(text2.Text)
For i 1 To h
If l i * 4 + (h - i) * 2 Then
Exit For
End If
Next i
Label5.Caption h - i
Label6.Caption i
如果找不到正确答案, If i h + 1 Then
将会出现什么情况? Label5.Caption "err"
Label6.Caption "err"
Else
Label5.Caption h - i
Label6.Caption i
End If
枚举法 (穷举法)
按照问题要求确定问题解的大致范围,然
后在此范围内对这些解进行一一列举,再
对当前列举出的解进行是否满足问题要求
的判断,最后把符合要求的解输出直到所
有可能的解全部列举完毕。
确定范围 情况枚举 条件判断 得到真解
练习1 :完全平方数
求出1-100之内的完全平方数。 (若一个数
能表示成某个整数的平方的形式,则称这
个数为完全平方数)
Dim i As Integer
For i 1 To 100
If i Int(Sqr(i)) ^ 2 Then
List 1.AddItem i
End If
Next i
列表框List控件
在list1 中添加元素 “hello”
List1.additem “hello”
清空list1 :
³ List1.clear
Additem和clear是方法名。
练习2 :水仙花数
水仙花数是指一个 3 位数,它的每个位上
的数字的 3次幂之和等于它本身 (例如:
1^3 + 5^3+ 3^3 = 153)。
求出100-999有多少个水仙花数。
帮助
如何取出百、十、个位的数字?
³ 看做字符串,用mid 函数
³ 用 “\”,mod等运算符组合。
® 123 mod 10=3
® 123 \100 =1