PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   能看出這個簡單程式有什麼問題的人絕對是個高手 (https://www.pcdvd.com.tw/showthread.php?t=816594)

=風= 2008-09-21 08:06 PM

能看出這個簡單程式有什麼問題的人絕對是個高手
 
會公佈答案
但在公佈答案前
想看看那些高手可以看出問題點
能看出來
真的很不簡單
第一次看到這個程式
發覺寫這程式的人真是利害
樂透程式碼可以寫到這麼短
後來仔細研究才發現這程式碼絕對不能拿來跑樂透 :)
這是個vb6的程式
程式如下

Option Base 1
'樂透,39號取出6個號碼
Private Sub Form_Load()
Dim ball(39) As Integer
Dim i, b1, num As Integer
Randomize
'把球編號 1至39號
For i = 1 To 39
ball(i) = i
Next

num = 39
For i = 0 To 5
b1 = Int(Rnd() * num) + 1 '亂數選號
Text1(i).Text = ball(b1) '選中的號碼,放入Text1文字方塊中
ball(b1) = ball(num)
num = num - 1
Next i

End Sub
:)

elodie319 2008-09-21 08:20 PM

有可能出現5個39號嗎

peter liou 2008-09-21 08:23 PM

它怎麼沒做號碼重覆檢查?

阿宅 2008-09-21 08:27 PM

如果Rnd() 這函數回傳介於0~1之間的話
那絕對不會選到....質數...
應該說很的數值都無法乘出

應該用
(int)(Rnd()*1000)%39+1
會比較好.....

=風= 2008-09-21 08:28 PM

引用:
作者elodie319
有可能出現5個39號嗎

我前面說過
發覺寫這程式的人真是利害
樂透程式碼可以寫到這麼短
所以不可能有這麼大的漏洞 :)

李麥科 2008-09-21 08:35 PM

引用:
作者阿宅
如果Rnd() 這函數回傳介於0~1之間的話
那絕對不會選到....質數...
應該說很的數值都無法乘出

應該用
(int)(Rnd()*1000)%39+1
會比較好.....

啊宅你還會寫程式

我連程式都不會寫........不能當好人

八佾劍舞 2008-09-21 08:43 PM

所以阿宅果然有真材實料 :p

阿宅 2008-09-21 08:48 PM

哈...我好像猜錯了...




我還是沒資格當好人... :cry: :cry: :cry:

=風= 2008-09-21 08:50 PM

引用:
作者阿宅
如果Rnd() 這函數回傳介於0~1之間的話
那絕對不會選到....質數...
應該說很的數值都無法乘出

應該用
(int)(Rnd()*1000)%39+1
會比較好.....

我剛run一次
跑出來的答案有31、7是值數
36
31
10
30
34
7
:)

slamcar 2008-09-21 08:54 PM

引用:
作者peter liou
它怎麼沒做號碼重覆檢查?

因為它不會重覆啊~~


所有的時間均為GMT +8。 現在的時間是02:03 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。