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