关于VB循环——为什么两个过程结果不一样?

来源:百度知道 编辑:UC知道 时间:2024/05/24 06:12:28
将一张面值为100元的人民币等值换成100张5元、1元、和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?
此问的两种编程法:
方法1:
Private Sub Command1_Click()
Dim x%, y%, z%
Picture1.Print "5元", "1元", "0.5元"
Picture1.Print
n = 0
For x = 1 To 100
For y = 1 To 100
For z = 1 To 100
If x + y + z = 100 And 5 * x + y + 0.5 * z = 100 Then
Picture1.Print x, y, z
n = n + 1
End If
Next z
Next y
Next x
Picture1.Print "共有" & n & "种组合"
End sub

方法2:
Private Sub Command2_Click()
Dim x%, y%, z%
n = 0
Picture2.Print "5元", "1元", "0.5元"
Picture2.Print
For x = 1 To 19
For y = 1 To 100 - x
For z = 1 To 100 - x - y
If 5 * x + y + 0.5 * z = 100 Then
Pictu

第一种方法是正确的,第二种不正确,请注意以下的数据,每一种情况加起来刚刚是100元,但不都是100张

5元 1元 0.5元
1 91 8
1 92 6
1 93 4
1 94 2
2 82 16
2 83 14
2 84 12
2 85 10
……

的确是个问题,搞不明白!!

请注意z+y+x=100要求,第二种方法有问题啊。

另外:第一种的方法的for x =1 to 100 不用作那么多循环,因为100元最多只能换成20张5元的,而且,还要留位置给1元和0.5元的,所以,for x=1 to 19 足够。

第二种换出来不一定满足100张零钞的要求,所以是错误的

第二种的判断中也应该为
If x + y + z = 100 And 5 * x + y + 0.5 * z = 100 Then
……

当y是90或92的时候,x + y + z = 100,可能吗?只有91是满足的,是循环结束而不是循环跳出。

第二种z的思路错。