关于随机数,急,严重!

superable 2003-02-08 06:07:15
请问在VB中
我怎么样在一个过程中用同一个数初始化随机数生成器
也就是怎么样重新从第一位取这个随机序列!
不知道讲清楚没有
可交流
xiangpf@csdn169.com.cn
QQ:2487005

先谢谢了!
...全文
58 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sophie719 2003-02-21
  • 打赏
  • 举报
回复
厉害
Tenner 2003-02-21
  • 打赏
  • 举报
回复
用这个函数试试:

Public Function CreateRandomArray(ArrayName() As Long, Min As Long, Max As Long, Duplicable As Boolean, BackProcess As Boolean)
'*******************************************************************
' 名 称: 随机数组生成函数
' 作 用: 生成随机数组
' 参 数 表: ArrayName() As Long 目标数组
' Min As Long 最小值
' Max As Long 最大值
' Duplicable As Boolean 可否重复
' BackProcess As Boolean 是否后台生成, 会影响速度
' 返 回 值: ArrayName() As Long
' 说 明: 仅限一维长整型数组, 数组元素编号从 1 开始
' 当生成无重复连续数组时(如生成一个含有1000个元素的数组而
' 数的范围为从1到1000), 速度会大幅度增加
'*******************************************************************
Dim i As Long
If Min >= Max Then Exit Function
Randomize Timer
If Duplicable = True Then
For i = 1 To UBound(ArrayName())
If BackProcess Then DoEvents
ArrayName(i) = Int((Rnd * (Max - Min + 1) + Min))
Next i
Else
If Max - Min + 1 = UBound(ArrayName()) Then
For i = 1 To UBound(ArrayName())
If BackProcess Then DoEvents
ArrayName(i) = Min + i - 1
Next i
Dim ii As Long
For i = 1 To Int(UBound(ArrayName()))
If BackProcess Then DoEvents
ii = Int(Rnd * (UBound(ArrayName())) + 1)
If ii <> i Then Swap ArrayName(i), ArrayName(ii)
Next i
Else
For i = 1 To UBound(ArrayName())
Do
ArrayName(i) = Int((Rnd * (Max - Min + 1) + Min))
Loop Until IfDuplicate(ArrayName(), i, BackProcess) = False
Next i
End If
End If
End Function

Private Function IfDuplicate(ArrayName() As Long, iCur As Long, BackProcess As Boolean) As Boolean
Dim ii As Long
For ii = 1 To iCur - 1
If BackProcess Then DoEvents
If ArrayName(ii) = ArrayName(iCur) Then
IfDuplicate = True
Exit Function
End If
Next ii
IfDuplicate = False
End Function

比如你要生成 1 到 1亿之间的不重复的5000万个数,可以用:
Dim a(1 To 50000000) As Long
CreateRandomArray a(), 1, 100000000&, False, False
qixg 2003-02-20
  • 打赏
  • 举报
回复
每次必须用不同的种子才能得到不同的结果。
superable 2003-02-20
  • 打赏
  • 举报
回复
这样做就可以了
Randomize(-1)
不好意思,

可是我现在还有一个问题,我怎么能得到不重复的随机数呢?
请高人回答!
比如我要得到1亿个不重复的随机数,有什么办法,因为数太多,不可能都放如内存中!
绝缘 2003-02-08
  • 打赏
  • 举报
回复
先要用随机数种子
Randomize [number]
当没有参数时取系统当前时间的秒数
xingnup 2003-02-08
  • 打赏
  • 举报
回复
若要每次产生同样的随机数可用:
Randomize number
若要每次产生不同的随机数可用:(不带参数)
Randomize

ricemaster 2003-02-08
  • 打赏
  • 举报
回复
恩,他是不是说说下次还要这个顺序的随机数,第一次出来的时候你存起来,以后再用不得了
Tenner 2003-02-08
  • 打赏
  • 举报
回复
Randomize x
只要 x 一样,每次运行等到的随机数列就会完全一样
如果想得到每次都不一样的没有规律的随机数列,一般用:
Randomize Timer
MarGo 2003-02-08
  • 打赏
  • 举报
回复

randomize seed
int(rnd*N)
northwolves 2003-02-08
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Randomize 1000 '用1000初始化随机数生成器
MsgBox Int(Rnd * 100) ' 每次结果都是一样的
End Sub
用户 昵称 2003-02-08
  • 打赏
  • 举报
回复
randomize 种子数
ok?

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧