作者JJss (sad jjss)
看板Visual_Basic
標題Re: [VB6 ] 亂數不重複
時間Wed Nov 2 17:11:05 2005
※ 引述《lovebandy ( it's my time)》之銘言:
: 我是VB新手
: 想寫一個模擬產生賓果遊戲的方格。宣告一個5x5的陣列
: 其中陣列中每個元素為隨機產生(1~25)且產生的數字不可重複
: 麻煩各位大大指點一下囉!!
最直覺的作法是
用一個陣列 box[25] 來記憶曾經產生過的亂數
去儲存每次產生的亂數,然後新產生的亂數就先檢查有沒有儲存過了
有的話重新產生,沒有的話儲存進去,並放置到方格的二維陣列中
25次的迴圈跑完結果也出來了
不過既然是最直覺的作法,所以是不考慮效率的,小程式這樣就可以了
比較好的作法是
設一個陣列 box[25]
當產生過了,就將該元素值設定 (如設成1 box[6]=1)
每次產生亂數後,如果該元素已設定過,則不產生,重新產生
然後沒設定過的-> 設定 -> 放置到方格的二維陣列中
會比較有效率一些,不過除非是網路程式 會多人使用 不然其實差不太多
更好的作法是
同方法二,但是每次產生的亂數範圍遞減,
每次產生的亂數值不是直接數,而是位移值
如產生 7 ,則去取第7個未被設定的亂數
跟前兩個方法比較 差別最多的就是時間使用的穩定性
前面的方法中,當亂數產生已經使用過,只能重新產生 (重擲骰)
所以時間不穩定,而這個方法可以較固定時間
在比較大或是網路環境 (多人同時使用)的需要效率的情況下 建議使用
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.69.52.192