如果對于随機數了解沒有什麼問題,請跳過思路,直接看函數,如果對有函數有疑問或是改進意思,歡迎來信[email protected]
' 思路
Randomize ' 初始化随機數生成器
Print Int ( Rnd () * 2 ) ' 生成随機數範圍是0-1
' 如果要生成1-10之間的随機數:
' 可以看作随機數的的起始數是:1,範圍是1+(0~9)
' Int(Rnd() * 10) 生成0-9之間的數,再加上起始數1,是以
Print Int ( Rnd () * 10 ) + 1
' 如果要生成10-30之間的随機數:
' 可以看作随機數的起始數是:10,範圍是10+(0~20)
' int(Rnd() * 21)生成0-20之間的随機數,再加上起始數10,是以
Print Int ( Rnd () * 20 + 1 ) + 10
' 如果要生成N-M之間的随機數
' 可以看作随機數的起始數是:N,範圍是10+(0~M-N)
' int(Rnd() * (M-N+1))生成0-(M-N)之間的随機數,再加上起始數N,是以
Print Int ( Rnd () * (M - N + 1 )) + N
函數正文:
' --------------------------------------------------------------------------------------
' 任意随機數(N-M)的函數(單取、多取存入數組、排序等功能)
' ----------------------------------------------2008-4-11
' -----------------------------------by 鞠勇鴻
' 對于本函數有改進意見,如果您友善請發郵件緻:[email protected]
' --------------------------------------------------------------------------------------
Function getRnd(N, M As Integer ) As Integer ' 取N-M之間的随機數,M>=N
getRnd = Int ( Rnd () * (M - N + 1 )) + N
End Function
Function getArrRndNR(Counter As Integer , N, M As Integer ) As Integer () ' 取Counter個N-M之間的随機數(不重複)
If (Counter > (M - N + 1 )) Then
MsgBox " 随機數設定不正确 "
Exit Function
End If
ReDim arr( 1 To Counter) As Integer
i = 0
Do While i < Counter
arr(i + 1 ) = getRnd(N, M)
found = False
For X = 1 To i
If arr(X) = arr(i + 1 ) Then
found = True
Exit For
End If
Next
If Not found Then
i = i + 1
End If
Loop
getArrRndNR = arr
End Function
Function getArrRnd(Counter As Integer , N, M As Integer ) As Integer () ' 取Counter個N-M之間的随機數(可重複)
If (Counter > (M - N + 1 )) Then
MsgBox " 随機數設定不正确 "
Exit Function
End If
ReDim arr( 1 To Counter) As Integer
For i = 1 To Counter
arr(i) = getRnd(N, M)
Next
getArrRnd = arr
End Function
Sub OrderNumberD(arr) ' 從大到小排序
For i = LBound (arr) To UBound (arr)
For j = LBound (arr) To UBound (arr)
If arr(i) > arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
Sub OrderNumberA(arr) ' 從小到大排序
For i = LBound (arr) To UBound (arr)
For j = LBound (arr) To UBound (arr)
If arr(i) < arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
' --------------------------------------------------------------------------------------
' ---------------------------------------函數結束---------------------------------------
' --------------------------------------------------------------------------------------
測試:
' 測試
Private Sub Command1_Click()
Randomize ' 一定要初始化随機數,否則每次打開程式取出的數都一樣的。
MsgBox getRnd( 1 , 12 ), vbOKOnly, " 1-12之間任取一數 "
arr = getArrRndNR( 10 , 11 , 33 ) ' 取10個11-33之間不重複的随機數,存入數組arr,取重複的可以用getArrRnd函數
OrderNumberA arr ' 升序排列數組arr ,降序排列為OrderNumberD
For i = 1 To UBound (arr) ' 顯示
Print arr(i)
Next
End Sub