随机数种子需要什么才能让他在100选80得时候不重复呢??
其二,怎么能快一点??
1 楼laisiwei(.:RNPA:.刺猬)回复于 2002-06-27 08:44:17 得分 10
和前面的一一比较,如果有重复,再重新取一个随机数Top
upTop
Option Explicit
Dim aNum(99) As Integer
Private Sub Form_Load()
Randomize Timer
Gen
Dim n As Integer
For n = 0 To 79
Debug.Print aNum(n)
Next
End Sub
Private Sub Gen()
Dim nIndex As Integer
Dim a, b, s As Integer
For nIndex = 0 To 99
aNum(nIndex) = nIndex + 1
Next
For nIndex = 0 To 50
a = Int(Rnd * 100)
b = Int(Rnd * 100)
s = aNum(a)
aNum(a) = aNum(b)
aNum(b) = s
Next
End Sub
谁有更好的办法?
Top
to laisiwei(刺猬)
经常死掉了
就是经常重复造成的Top
有一个“幸运的基督徒”的算法,不知你听过没有?
大意就是N个人排成一圈,数数,数到某个数的人就跳出圈子,下面的人在从一开始数。
为了增加随即性,可以把跳出的人从新再排成一队,重复这个过程
我就是用这个方法制造随即序列的Top
建一个a(20)的数组,里面的值从80-100,然后取一个0-20之间的随机数,假设是15,那么将a(15)取出来,然后将a(16)到a(20)的数全部前移一位,就是a(16)->a(15), a(17)->a(16)...,然后取0-19之间的随机数,再按照上面的方式取数以及移数。Top
to robin_xin_xin(鳄鱼宝宝)
我不是个幸运的基督徒 ~~~~
请赐教,有源码???
但是如果基数很大呢??上万个基督徒呢??Top
我的方法同 robin_xin_xin(鳄鱼宝宝) 差不多Top
如果很多的话可以再分组,例如10000个可以做一个a(100,100)的数组,另外做一个b(99)的数组记录每一个分组已经取过的次数,初始值为100,每一组取一次以后数组b中相应的值减1。Top
为人要取数?你可把100个数进行随机排序,把顺序打乱,然后随机去掉20个不就得了!
呵呵,我的想法总是与众不同。Top
LIKEVB(*^-^*,能笑两笑就好了)
我的办法如何??Top
谢谢 nik_Amis(Azrael)
我用这个方法解决的
For i = txt1 To txt2
100:
a(i) = Int(L_hs * Rnd) + 1
For j = 0 To i - 1
If a(i) = a(j) And i <> j Then
DoEvents
GoTo 100
End If
Next j
Close #1
Open App.Path + "/cj.txt" For Input As #1
Seek 1, a(i) '把指针移到文件1的第1行
Line Input #1, inputdata '读数据
jjj = jjj + 1
Debug.Print inputdata
next i
还很不错Top
Option Explicit
Dim aNum(99) As Integer
Private Sub Form_Load()
Randomize Timer
Gen
Dim n As Integer
For n = 0 To 79
Debug.Print aNum(n)
Next
End Sub
Private Sub Gen()
Dim nIndex As Integer
Dim a, s As Integer
For nIndex = 0 To 99
aNum(nIndex) = nIndex + 1
Next
For nIndex = 0 To 99
a = Int(Rnd * 100)
s = aNum(nIndex)
aNum(nIndex) = aNum(a)
aNum(a) = s
Next
End Sub
Top
TO: LIKEVB(*^-^*,能笑两笑就好了)
你的程序效率太低,试试上面的。Top
好的,谢谢
以后请多关照Top
马上试
谢谢关照Top
junwhj()
握手,呵呵
Top
谢谢
结了Top
用一个循环跟前面的比较一下,如果有重复,再重新取一个随机数
a:
产生随机数
for 1 to 当前随机数的个数
if 新产生的随机数=当前随机数 then goto a
next
Top
For i = txt1 To txt2
100:
a(i) = Int(L_hs * Rnd) + 1
For j = 0 To i - 1
If a(i) = a(j) And i <> j Then
DoEvents
GoTo 100
End If
Next j
Close #1
Open App.Path + "/cj.txt" For Input As #1
Seek 1, a(i) '把指针移到文件1的第1行
Line Input #1, inputdata '读数据
jjj = jjj + 1
Debug.Print inputdata
next i
还很不错
这种办法我一开始也用过
可是效率低了
如果是要求5000个
恐怕就要算很长时间了