Dim RandomData as integer Dim A,B,C,D as IntegerRandomData=Rnd Mod 100 A=RandomData'get B RandomData=Rnd Mod 100 While RandomData=A RandomData=Rnd Mod 100 WEND B=RandomData'get C RandomData=Rnd Mod 100 While RandomData=A or RandomData=B RandomData=Rnd Mod 100 WEND C=RandomData'get D RandomData=Rnd Mod 100 While RandomData=A or RandomData=B or RandomData=C RandomData=Rnd Mod 100 WEND D=RandomDataMSGBOX(A) MSGBOX(B) MSGBOX(C) MSGBOX(D)
dim InitNum(0 To 3) As Long For I = 0 To 3 InitNum(I) = Int(10 * Rnd) For J = 0 To I - 1 '检查重复 并重新生成随机数 If InitNum(I) = InitNum(J) Then InitNum(I) = Int(10 * Rnd) J = -1 '从第一个数 重新检查 End If Next J TxtNum(I) = "" Next I
你们究竟有没有学过算法的呀?!pasl的方法虽然可以但效率非常低。 下面是其中的一种算法: Public Sub GenerateNoneRepeatRndNum(ByVal MaxNumber As Long, ByRef rndArray() As Long) Dim tmpArray() As Long
ReDim tmpArray(0 To MaxNumber) ReDim rndArray(0 To MaxNumber)
Dim i As Long
For i = 0 To MaxNumber tmpArray(i) = i Next
Dim iPos As Long
Randomize (Timer)
For i = MaxNumber To 0 Step -1 iPos = Int(Rnd * i) rndArray(MaxNumber - i) = tmpArray(iPos) tmpArray(iPos) = tmpArray(i) Next
Exit Sub
viperstorm(你也真调皮呀,都叫你不要到处乱扔东西…) 你的方法很好!Public Sub GenerateNoneRepeatRndNum(Byval RndNum as long ,ByVal MaxNumber As Long, ByRef rndArray() As Long) Dim tmpArray() As Long
ReDim tmpArray(0 To MaxNumber) ReDim rndArray(0 To RndNum)
Dim i As Long
For i = 0 To MaxNumber tmpArray(i) = i Next
Dim iPos As Long
Randomize (Timer)
For i =0 to RndNum iPos = Int(Rnd * (maxnumber-i)) rndArray(i) = tmpArray(iPos) tmpArray(iPos) = tmpArray(i) Next
Public Sub GenerateNoneRepeatRndNum(Byval RndNum as long ,ByVal MaxNumber As Long, ByRef rndArray() As Long) Dim tmpArray() As Long
ReDim tmpArray(0 To MaxNumber) ReDim rndArray(0 To RndNum)
Dim i As Long
'初始化随机数范围(0-MaxNumber) For i = 0 To MaxNumber tmpArray(i) = i Next
Dim iPos As Long
Randomize (Timer)
For i =0 to RndNum iPos = Int(Rnd * (maxnumber-i)) '获取随机数位置 rndArray(i) = tmpArray(iPos) '随机数复制 tmpArray(iPos) = tmpArray(i) '将已用的随机数与未用的随机数调换,以保证前0-(maxnumber-i)位随机数都没有被使用过,这一句是保证不重复随机数的关键语句 Next
Dim A,B,C,D as IntegerRandomData=Rnd Mod 100
A=RandomData'get B
RandomData=Rnd Mod 100
While RandomData=A
RandomData=Rnd Mod 100
WEND
B=RandomData'get C
RandomData=Rnd Mod 100
While RandomData=A or RandomData=B
RandomData=Rnd Mod 100
WEND
C=RandomData'get D
RandomData=Rnd Mod 100
While RandomData=A or RandomData=B or RandomData=C
RandomData=Rnd Mod 100
WEND
D=RandomDataMSGBOX(A)
MSGBOX(B)
MSGBOX(C)
MSGBOX(D)
InitNum(I) = Int(10 * Rnd)
For J = 0 To I - 1
'检查重复 并重新生成随机数
If InitNum(I) = InitNum(J) Then
InitNum(I) = Int(10 * Rnd)
J = -1 '从第一个数 重新检查
End If
Next J
TxtNum(I) = ""
Next I
下面是其中的一种算法:
Public Sub GenerateNoneRepeatRndNum(ByVal MaxNumber As Long, ByRef rndArray() As Long) Dim tmpArray() As Long
ReDim tmpArray(0 To MaxNumber)
ReDim rndArray(0 To MaxNumber)
Dim i As Long
For i = 0 To MaxNumber
tmpArray(i) = i
Next
Dim iPos As Long
Randomize (Timer)
For i = MaxNumber To 0 Step -1
iPos = Int(Rnd * i)
rndArray(MaxNumber - i) = tmpArray(iPos)
tmpArray(iPos) = tmpArray(i)
Next
Exit Sub
ReDim tmpArray(0 To MaxNumber)
ReDim rndArray(0 To RndNum)
Dim i As Long
For i = 0 To MaxNumber
tmpArray(i) = i
Next
Dim iPos As Long
Randomize (Timer)
For i =0 to RndNum
iPos = Int(Rnd * (maxnumber-i))
rndArray(i) = tmpArray(iPos)
tmpArray(iPos) = tmpArray(i)
Next
Exit Sub
ReDim tmpArray(0 To MaxNumber)
ReDim rndArray(0 To RndNum)
Dim i As Long
'初始化随机数范围(0-MaxNumber)
For i = 0 To MaxNumber
tmpArray(i) = i
Next
Dim iPos As Long
Randomize (Timer)
For i =0 to RndNum
iPos = Int(Rnd * (maxnumber-i)) '获取随机数位置
rndArray(i) = tmpArray(iPos) '随机数复制
tmpArray(iPos) = tmpArray(i) '将已用的随机数与未用的随机数调换,以保证前0-(maxnumber-i)位随机数都没有被使用过,这一句是保证不重复随机数的关键语句
Next
Exit Sub