将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
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





























用RndSel生成的一串随机数,放在一个数组里,最前面N个是已经随机抽取的。
举个例子:
















Call RndSel(37, 7, arr()) 这句就是从1-37中选择7个,放到arr()中,arr(0)-arr(6)就是这7个数