2007-06-10 17:32:20 Kenny

產生不重複亂數的方法

一、以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次所產生的亂數均沒有重複發生。