所以我下面的代碼,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