[.NET] 亂數 平均分配問題

看板Visual_Basic作者 (Skyer)時間12年前 (2013/05/20 11:32), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/2 (看更多)
Visual Studio 2012 小弟是剛入門的新手 想寫些小遊戲 如何取亂數也算是老問題了 以下是我目前的程式碼 Label1.Text = "" Dim card As Integer Dim out(9) As Integer Dim err As Integer '確認有無錯誤 Randomize() For i = 1 To 100 card = Int(Rnd() * 10) + 1 '取1~10之亂數 Select Case card '用意是紀錄1~10之出現次數 Case 1 out(0) += 1 Case 2 out(1) += 1 吃掉 占版面 Case 10 out(9) += 1 End Select Next For j = 0 To 9 Label1.Text &= out(j) & vbCrLf Next 小弟初學,所以只能用比較笨的方法測試 如果各位大大有能簡化的方法也可以順便教教小弟 正題... ramdomize(timer)+rnd是最簡單方便取亂數的方式 但是我發現...他出來的數字並不是非常平均分布 爬文+google 好像滿少對這類的討論.... 想請問有沒有更好的寫法,取的亂數更平均分配呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.227.144.10

05/20 13:55, , 1F
你有沒有聽過大數定理
05/20 13:55, 1F

05/20 16:20, , 2F
我知道你說的意思 數字越大 結果會越平均
05/20 16:20, 2F

05/20 16:20, , 3F
不過在數字小的時候 rnd實在是不平均的誇張...
05/20 16:20, 3F

05/20 17:00, , 4F
這是當然的。沒有什麼討論是因為本來就是這樣。
05/20 17:00, 4F

05/20 17:03, , 5F
你怎麼測也不會有更好的結果。
05/20 17:03, 5F

05/20 17:41, , 6F
亂數就是亂數 沒有一定比例的
05/20 17:41, 6F

05/20 21:05, , 7F
恩恩~好吧..謝謝各位回覆
05/20 21:05, 7F

05/21 07:07, , 8F
如果要保證取完有限集合,那用洗牌法卡實在。
05/21 07:07, 8F
文章代碼(AID): #1HcPbYg1 (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #1HcPbYg1 (Visual_Basic)