產生不重複亂數的方法
一、以For ...Next 技巧,產生10個1~50的亂數,存入陣列A()
Dim A(10) As Integer
Randomize()
For i = 1 To 10
A(i) = Fix(Rnd() * 50) + 1 'Fix(n)無條件捨去小數
For j = 0 To i - 1
If A(i) = A(j) Then
i = i - 1
Exit For
End If
Next j
Next i
二、以For ...Next 技巧,產生10個10~50的亂數,存入陣列A()
Dim A(10) As Integer
Randomize()
For i = 1 To 10
A(i) = Fix(Rnd() *(50-10+1)) + 10
For j = 0 To i - 1
If A(i) = A(j) Then
i = i - 1
Exit For
End If
Next j
Next i
三、最快速,最有效率的作法,產生1~50的亂數只要執行迴圈50次。
n = 50
Dim A(50) As Integer
For i = 0 To n
A(i) = i + 1
Next
Randomize
For i = n To 1 Step -1
num = Fix((i + 1) * Rnd)
temp = A(i)
A(i) = A(num)
A(num) = temp
times = times + 1
Next
最後可觀察times的值就是50,也就是說執行50次所產生的亂數均沒有重複發生。
上一篇:如何在模組中宣告常數
下一篇:鬧鈴程式