怎样使以下随机函数不重复出现(VB)?
给一个小程序,希望有帮到您。
Dim n As Integer, a(20) As Integer
Private Sub Command1_Click() '初始化
n = 20
For i = 1 To n
a(i) = i
Next i
Command2.Enabled = True
End Sub
Private Sub Command2_Click() '随机抽取不重复数字
Randomize
k = Int(Rnd * n) + 1
Print a(k);
a(k) = a(n)
n = n - 1
If n Mod 10 = 0 Then Print
If n = 0 Then Command2.Enabled = False
End Sub
你这样搞,定义个数组。然后把查询过的随机数据保存在数组里。
在下次查询的时候使用FOR循环检索下,然后再for里用个if去判断。重复的直接跳过。。。
这样就行了、
代码会写吗?不会的话追问,我给你写好
麻烦帮写一下 我不会写O(∩_∩)O~ 下面是原来的部分代码 谢谢!
a = Fix(Rnd * 54 + 1) '使用随机函数
抽取框.Text = a
结果框.Text = ""
DoEvents
Loop
End Sub
Private Sub 停止_Click()
结果框.Text = 抽取框.Text
已抽题目 = 已抽题目 + 抽取框 + " "
停止.Enabled = False
End
End Sub
我给你一个思路,你把题目保存在数组中,你的应该是54个题,根据随机数的值交换两个数组成员的值,把顺序打乱。你固定输出一个或多个题即可。
例如:
dim D(3) asinteger, v as integer
For v=1 to 3
D(3)=v
Next
For v=1 to 3
If RND>0.5 then
D(0)= D(1)
D(1)= D(v)
D(v)= D(0)
End if
Next
假设,
第一次随机数大于0.5,D(1)和D(1)交换;1,2,3
第二次随机数大于0.5,D(2)和D(1)交换;2,1,3
第三次随机数大于0.5,D(3)和D(1)交换;3,1,2
第一次随机数大于0.5,D(1)和D(1)交换;1,2,3
第二次随机数不大于0.5,不交换;1,2,3
第三次随机数大于0.5,D(3)和D(1)交换;3,2,1
第一次随机数大于0.5,D(1)和D(1)交换;1,2,3
第二次随机数大于0.5,D(2)和D(1) 交换;2,1,3
第三次随机数不大于0.5,不交换;2,1,3
就出现123;312;321;213四种组合了,由于是根据随机数交换的他也就是随机的。
我们最后来输出D(1),就是1,3,3,2了。每次输出的都不一样。就不存在重复了,当然交换的规律可以自己设定。
一般来说,在抽签的过程中,概率是逐步升高的。
例如,有五只签,第一次抽取某只签的概率是五分之一。第二次抽取的是四分之一……
因为,第一次抽完后,就只剩下四只签了,要模拟抽签的过程就要每次都要做相应的调整。
如果存在,重新生成;
如果不存在,就可以取为结果,并存进题号库