查看完整版本: 我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆
頁: [1]

貞董 發表於 2017-4-23 06:00 AM

我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆

我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆<div></div>

johnwanz 發表於 2017-4-26 10:26 AM

建立一個數字pool, 亂數取出一筆, 取出後就消失, 自然不會有重複.

tryit244178 發表於 2017-5-1 05:23 PM

本帖最後由 tryit244178 於 2017-5-10 04:31 PM 編輯

呃…編輯一下整個程式碼都噴掉了…
算了…宣告個陣列紀錄已經取出過的數字就行了
來補程式碼,先建立一個物件類別模組
'物件類別模組 Class1
Private bingoNumberLog(1 To 25) As Boolean

Public Sub Reset()
    Dim i As Integer
   
    For i = 1 To 25
        bingoNumberLog(i) = False
    Next i
End Sub

Public Function GetNumber() As Integer
    Do
        GetNumber = GetRndNumber(25)
    Loop Until Not IsRepeat(GetNumber)
   
    bingoNumberLog(GetNumber) = True
End Function

Private Function GetRndNumber(ByVal value As Integer) As Integer
    Randomize
    GetRndNumber = Int(Rnd() * value) + 1
End Function

Private Function IsRepeat(ByVal value As Integer) As Boolean
    IsRepeat = False
    If bingoNumberLog(value) = True Then IsRepeat = True
End Function
範例是這個。參考看看吧
'Demo
Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim bingo As New Class1
   
    bingo.Reset
    TextBox1.Text = ""
   
    For i = 1 To 25
        TextBox1.Text = TextBox1.Text & bingo.GetNumber & " , "
    Next i
End Sub
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

neqkwos1003 發表於 2017-12-6 06:25 AM

把25個數存入一個陣列a(25),將a(1)到a(25)打亂,再將a(1)到a(25)的數讀出,自然不重復!

羕漾 發表於 2017-12-7 02:25 AM

1. 土法練鋼法:
跑1個1~25的For迴圈,然後產生亂數後跑一個 While 去找這個數字是否使用過,如是,則繼續產生並繼續執行迴圈
此方法最大的圈點是可能會執行多次多餘的迴圈
2. 往後遞衍:
先定義25個 Slot ,再 Rnd 一個值看該 Slot 有沒有塞值了,有的話繼續往後遞衍,再將陣列從頭讀到尾就會是一個不重覆的亂數了!
3. 透過 LinkList 結構的串列
先產生 1~25 個數字到串列上
然後以亂數公式取值 (INT(Rnd*lst.Count)) ,取過的值就透過 Remove 來將值從該串列移除,這樣就不會取到重覆的值了!
(主要是透過 LinkList 可以動態的刪掉中間節點)
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

earnyting 發表於 2018-6-1 11:58 AM

早期我也是土法練鋼型。

把抽過的號碼比對一下之前抽出的號碼。

有抽過,系統就再抽。反正處理的速度很快,user 不會感覺得出來

不過還是建議用比較進階的方法處理啦。不然讓別人看到這種程式碼會被笑。XD

earnyting 發表於 2019-1-7 08:36 AM

不是在取數之前 加上Randomize Timer 就好了嗎?
為何要這麼辛苦?
頁: [1]