作者fumizuki (蒙面加菲狮)
看板Visual_Basic
标题Re: [VB6 ] 关於取乱数不重复
时间Thu Jun 26 22:31:59 2008
刚才依照几位板友的建议,试着用了我没用过的写法来写49选6的乱数值
先把49个数字放在一个暂存的阵列中,再抽出6个数字
(以前我都只会用回圈去找有没有重覆,效能很差,还有可能会无穷回圈)
Public Sub Main()
Randomize Timer
'设定最小值及最大值
Const min As Integer = 1, max As Integer = 49
'设定要取得乱数的数量
Const count As Integer = 6
Dim number() As Integer
number = GetRndNumber(min, max, count)
Dim i As Integer
For i = 0 To count - 1
Debug.Print number(i) & " ";
Next
Debug.Print
End Sub
'取得乱数
Public Function GetRndNumber(ByVal min As Integer, ByVal max As Integer, ByVal count As Integer) As Integer()
'计算阵列上限
Dim u As Integer
u = max - min
ReDim buffer(u) As Integer, result(count - 1) As Integer
Dim i As Integer, n As Integer
'将 min 至 max 范围的数字依序填入 buffer 阵列中
n = min
For i = 0 To u
buffer(i) = n
If i < u Then n = n + 1
Next
For i = 0 To count - 1
n = CInt(Rnd * u)
result(i) = buffer(n)
Swap buffer(n), buffer(u)
u = u - 1
Next
'回传结果
GetRndNumber = result
End Function
'变数交换
Public Sub Swap(ByRef v1 As Variant, ByRef v2 As Variant)
Dim tmp As Variant
tmp = v2
v2 = v1
v1 = tmp
End Sub
--
▃▅▇▆▄ ▆▂▃ `
逝去感情如何能留住,半点痴情遗留殊不易,██▅▇▄▃ ▇▃▂" .
█████████▃i ▁▄▇
更多凄凄惨惨的遭遇…………██▆▃ █▅▆▃ˍ▄*
◢ ▂█▄▇▅▂▌.
我不知道,王~八~蛋~~! ▂▆███ █▄▃ 。fumizuki。Check。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.99.129