天天看点

VB 任意随机数(N-M)的通用函数(单取、多取存入数组、排序等功能) 内附随机数介绍

如果对于随机数了解没有什么问题,请跳过思路,直接看函数,如果对有函数有疑问或是改进意思,欢迎来信[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