关于一个抽奖程序的原理

来源:百度知道 编辑:UC知道 时间:2024/07/15 05:15:45
随机输出一组双色球号码,从33个红色球任选6个,在从16个蓝色球任选1个组成一组号码:

Private Sub Command1_Click()
Dim i, a(33), b(6), c
Randomize: Cls
For i = 1 To 6
b(i) = Int(Rnd * 33 + 1)
If a(b(i)) Then i = i - 1 Else a(b(i)) = 1
Next
Print "红球中奖号码:";
For i = 1 To 6
Print b(i);
Next

c = Int(Rnd * 16 + 1)
Print "蓝球中奖号码:" & c
End Sub

能不能解释一下这个程序的原理,尤其是这一句:
If a(b(i)) Then i = i - 1 Else a(b(i)) = 1

If a(b(i)) 如果是个数那么是真 应该是执行i=i-1吧,我看程序是执行
Else a(b(i)) = 1这句,作用是什么?
那这个判断语句是不是永远都是假的。

和你说的差不多。
为真执行i=i-1否则执行 a(b(i)) = 1
揣摩他的意思,a(33)应该是红球6个数都有哪些,可是他在生成蓝球的时候,根本也没对红球判断。
-----------------------------------------
当 b(i)有重复的时候,a(b(i))为真
不是永远为假
----------------------------------------

For i = 1 To 6 '循环6次
b(i) = Int(Rnd * 33 + 1)'产生一个1-33的随即数
If a(b(i)) Then i = i - 1 Else a(b(i)) = 1
'如果a(b(i))为真代表有重复,i-- 退回重新产生一个随机数。如果a(b(i))为假,设置a(b(i))为真,就是给以后判断是不是已经产生过。
Next

数组a没有被赋值
所以a(b(i)) 是空值,在布尔型中,就是“假”,故有你说得过程。