所以我下面的代码,Vbscipt随机数发生器
max=2000
min=1
Randomize
cntr = 0
StartTime = Timer
Position = 1
set objFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\...\listfile4.csv",2,true)
do while cntr <> 1
cntr = 0
Answer = 1
Lottery = 2
do while Answer <> Lottery
Answer = (Int((max-min+1)*Rnd+min))
Lottery = (Int((max-min+1)*Rnd+min))
cntr = cntr + 1
loop
objFile.WriteLine(cstr(Position & "," & cntr & "," & Answer & "," & Lottery & "," & vbtab))
Position = Position + 1
loop
msgbox (Timer - StartTime)/60
基本上我选择2个[伪]随机数
Answer = (Int((max-min+1)*Rnd+min))
Lottery = (Int((max-min+1)*Rnd+min))
,并试图看看他们多久会匹配第一尝试。
所以cntr是这两个数字匹配需要花费多少次尝试的次数。 我循环该循环,直到它在第一次尝试时匹配。
当max
< 2000它最终会匹配在第一次尝试,导致程序结束。
然而,当max
> = 2000它似乎永远不会结束。对于2000年最低的cntr
它会产生的是2
。
这是奇怪的部分,我最初设置为max = 10000
。如果有一个足够大的测试集(可低至1000)的最小cntr
总是51
和最大cntr
总是57966
为什么是这种模式存在,如为什么是51最小?在某些情况下,我如何获得最小cntr
为1?我希望程序能够在第一次尝试时匹配。但是,如果我的最大数量大于1999年,那么他们在第一次尝试时就不会匹配。这是个问题。
你的问题到底是什么? – aphoria 2014-10-07 18:58:51
我必须测试它,但它似乎是'Int'函数中四舍五入过程的一个副作用。用'CLng'替换它们并尝试。 – 2014-10-07 21:14:53
我确实想过要测试这个。 'Clng'只是返回一组不同的标准Min和Max。这让我觉得它与命令(?)'Randomize'有关 – myacobucci 2014-10-07 22:59:50