【求助】樂透選號程式



贊助商連結


wpeter
2004-07-19, 10:35 PM
 小弟之前用VB寫了這個程式,但是因為概念上還不是很清楚,所以選出來
的七個號碼還是會有重複的情況,下面是我的原始碼,是不是可以請懂的人給
我一點指教?

Private Sub Command1_Click()

For i = 1 To 100 ' 設定製造100 組亂數

A = Int(41 * Rnd + 1) ' 產生第一個亂數(範圍01~42)
B = Int(41 * Rnd + 1) ' 產生第二個亂數(範圍01~42)
C = Int(41 * Rnd + 1) ' 產生第三個亂數(範圍01~42)
D = Int(41 * Rnd + 1) ' 產生第四個亂數(範圍01~42)
E = Int(41 * Rnd + 1) ' 產生第五個亂數(範圍01~42)
F = Int(41 * Rnd + 1) ' 產生第六個亂數(範圍01~42)
G = Int(41 * Rnd + 1) ' 產生第七個亂數(範圍01~42)

If A <> B & B <> C & C <> D & D <> E & E <> F & F <> G Then

Text1.Text = A
Text2.Text = B
Text3.Text = C
Text4.Text = D
Text5.Text = E
Text6.Text = F
Text7.Text = G

Exit For ' 已經有一組號碼了,就跳出FOR 迴圈

End If ' 跳出IF迴圈
Next i ' 下一組變數

End Sub

贊助商連結


sonsun
2004-07-19, 11:26 PM
最初由 wpeter 發表

If A <> B & B <> C & C <> D & D <> E & E <> F & F <> G Then

A<>B B<>C
A不會跟B相等, B不會跟C相等
但 A有可能會等於C:D

wpeter
2004-07-19, 11:45 PM
 唔∼是這個問題。到底要怎麼寫才好呢?我以為全部把它用&的聯集起來應該是不會有問題的。

VicLin
2004-07-19, 11:49 PM
用陣列來做
每次開新號都檢查有沒有重覆
如果有的話 就一直開 開到沒重覆為止
這是最普通的作法

其實做法可有有很多種
你可以弄每個號碼成陣列
然後從裡面挑 挑過的設為true 或 false
每次範圍就變小 如果那個號碼已經被挑走了 那就往下找 到了邊界就跳到第一個繼續
直到找到還沒被挑走的為止
第一種方法運氣差一點的話可能會連開好幾個號都同號
這種就比較穩定
不過老實說要連開好幾個同號的機會不多
兩種方法要經過測試才知道哪種效能高

還有...我不懂你的回圈在做什麼的
明明開一組就好
為什麼要弄for?

VicLin
2004-07-19, 11:53 PM
最初由 wpeter 發表
 唔∼是這個問題。到底要怎麼寫才好呢?我以為全部把它用&的聯集起來應該是不會有問題的。

& 的定義是 AND

在二進制裡表示要兩個都是1才會輸出1
也就是所謂的 "及閘"
(是這樣的字嗎= =?)

所以說

A <> B
True

B <> C
Ture

C <> D
True
.....
...
要所有的都是1 (True)才成立

wpeter
2004-07-20, 09:51 AM
 嗯∼經過VicLin給小弟的指教,終於寫出來了!哇∼真高興說∼