伊莉討論區

標題: 我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆 [打印本頁]

作者: 貞董    時間: 2017-4-23 06:00 AM     標題: 我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆

我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆
作者: johnwanz    時間: 2017-4-26 10:26 AM

建立一個數字pool, 亂數取出一筆, 取出後就消失, 自然不會有重複.
作者: tryit244178    時間: 2017-5-1 05:23 PM

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

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

  3. Public Sub Reset()
  4.     Dim i As Integer
  5.    
  6.     For i = 1 To 25
  7.         bingoNumberLog(i) = False
  8.     Next i
  9. End Sub

  10. Public Function GetNumber() As Integer
  11.     Do
  12.         GetNumber = GetRndNumber(25)
  13.     Loop Until Not IsRepeat(GetNumber)
  14.    
  15.     bingoNumberLog(GetNumber) = True
  16. End Function

  17. Private Function GetRndNumber(ByVal value As Integer) As Integer
  18.     Randomize
  19.     GetRndNumber = Int(Rnd() * value) + 1
  20. End Function

  21. Private Function IsRepeat(ByVal value As Integer) As Boolean
  22.     IsRepeat = False
  23.     If bingoNumberLog(value) = True Then IsRepeat = True
  24. End Function
複製代碼

範例是這個。參考看看吧
  1. 'Demo
  2. Private Sub CommandButton1_Click()
  3.     Dim i As Integer
  4.     Dim bingo As New Class1
  5.    
  6.     bingo.Reset
  7.     TextBox1.Text = ""
  8.    
  9.     For i = 1 To 25
  10.         TextBox1.Text = TextBox1.Text & bingo.GetNumber & " , "
  11.     Next i
  12. End Sub
複製代碼


作者: 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 可以動態的刪掉中間節點)

作者: earnyting    時間: 2018-6-1 11:58 AM

早期我也是土法練鋼型。

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

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

不過還是建議用比較進階的方法處理啦。不然讓別人看到這種程式碼會被笑。XD
作者: earnyting    時間: 2019-1-7 08:36 AM

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




歡迎光臨 伊莉討論區 (http://222.eyny.com/) Powered by Discuz!