将C++的函数稍改了一下,以适合在VB里用。
'
从1-max中随机选择n个,放在数组arrT()最前面
Public Sub RndSel(max As Integer , ByVal N As Integer , arrT() As Integer )
Dim p As Integer
Dim i As Integer
Dim tmp As Integer
If N > max Then N = max
ReDim arrT(max - 1 )
For i = 0 To max - 1
arrT(i) = i + 1
Next
For i = 0 To N - 1
p = Int (GetRnd( CSng (i), CSng (max)))
tmp = arrT(p)
arrT(p) = arrT(i)
arrT(i) = tmp
Next
End Sub
' 生成区间内的随机值,小数点后4位
Public Function GetRnd(min As Single , max As Single ) As Single
Static blnInit As Boolean
If Not blnInit Then
Randomize Timer
blnInit = True
End If
GetRnd = Rnd * (max - min) + min
End Function
Public Sub RndSel(max As Integer , ByVal N As Integer , arrT() As Integer )
Dim p As Integer
Dim i As Integer
Dim tmp As Integer
If N > max Then N = max
ReDim arrT(max - 1 )
For i = 0 To max - 1
arrT(i) = i + 1
Next
For i = 0 To N - 1
p = Int (GetRnd( CSng (i), CSng (max)))
tmp = arrT(p)
arrT(p) = arrT(i)
arrT(i) = tmp
Next
End Sub
' 生成区间内的随机值,小数点后4位
Public Function GetRnd(min As Single , max As Single ) As Single
Static blnInit As Boolean
If Not blnInit Then
Randomize Timer
blnInit = True
End If
GetRnd = Rnd * (max - min) + min
End Function
用RndSel生成的一串随机数,放在一个数组里,最前面N个是已经随机抽取的。
举个例子:
Dim
arr()
As
Integer
Dim i As Integer
Dim j As Integer
Dim s As String
Text1.Text = ""
For j = 1 To 20
Call RndSel( 37 , 7 , arr())
s = ""
For i = 0 To 6
If s <> "" Then s = s & " , "
s = s & Format( CStr (arr(i)), " @@ " )
Next
Text1.Text = Text1.Text & vbCrLf & s
Next
Dim i As Integer
Dim j As Integer
Dim s As String
Text1.Text = ""
For j = 1 To 20
Call RndSel( 37 , 7 , arr())
s = ""
For i = 0 To 6
If s <> "" Then s = s & " , "
s = s & Format( CStr (arr(i)), " @@ " )
Next
Text1.Text = Text1.Text & vbCrLf & s
Next
Call RndSel(37, 7, arr()) 这句就是从1-37中选择7个,放到arr()中,arr(0)-arr(6)就是这7个数