您的位置:首页 > 编程语言 > VB

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

2008-04-11 15:11 337 查看
如果对于随机数了解没有什么问题,请跳过思路,直接看函数,如果对有函数有疑问或是改进意思,欢迎来信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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐