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
'思路
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
相关文章推荐
- 编写程序实现以下功能: 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- 功能不错的分页存储过程,可支持多表查询,任意排序
- 第一周第四天([大小写变换问题][判断是否为email][求对角线的值] [生成数组][数字中添加逗号][生成10个两位随机数,然后再进行排序] [复制数组||将指定数组的指定范围复制到新的数组])
- [VB.NET]请问如何将从数据库提出来的一列数据存入一个数组中?
- 微软算法100题14 在排序数组中找到和为指定数的任意两个元素
- 随机数存入数组冒泡排序
- Oracle nls_sort和nlssort 排序功能介绍
- 6.用插入排序对任意一组随机数据进行随机数组进行排序(用循环和递归两种方法)
- Java之数组运用及排序介绍
- VB数组排序模块,使用的是快速排序法,支持 Variant、Double、Long、String……等多种数据类型数组排序。
- 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
- 删除任意数组中相同的元素 , 删除排序后的数组中相同的元素
- python:numpy数组运算、排序、统计、随机数生成
- 功能不错的分页存储过程,可支持多表查询,任意排序
- OC字典存入数组,输出数组中数据,并且删除小明一项,然后进行排序、现根据班级排序,班级相同的用年龄进行排序
- 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。