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

如果对于随机数了解没有什么问题,请跳过思路,直接看函数,如果对有函数有疑问或是改进意思,欢迎来信jyh_jack@163.com

' 思路

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 鞠勇鸿
'
对于本函数有改进意见,如果您方便请发邮件致:jyh_jack@163.com
'
--------------------------------------------------------------------------------------
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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值