[問題] 亂數不平均分佈

看板C_and_CPP作者 (Terry)時間14年前 (2011/11/16 10:18), 編輯推噓4(4030)
留言34則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 各位好,請教一下 我想要產生一個不平均的亂數 產生的亂數區間為1~10 1出現的機率是70% 2~10出現的機率是30% 我有查到版上有相似的問題,在5899這一個討論中 可是我看了好久看不太懂... 希望前輩們能提供一些方向 謝謝幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.157.230

11/16 10:26, , 1F
想法其實很簡單 以你這個例子來說就先七三決定是不是 1
11/16 10:26, 1F

11/16 10:26, , 2F
不是 1 再隨機產生 2~10 即可
11/16 10:26, 2F

11/16 10:27, , 3F
複雜一點的分布的話就去計算機率累積分布
11/16 10:27, 3F
懂了謝謝,可是我現在有點不太清楚的是,「七三決定是不是1」,要如何才可以知道 產生的1是在70%之中呢? 謝謝您。 ※ 編輯: bernachom 來自: 114.36.157.230 (11/16 10:35)

11/16 10:43, , 4F
你產生0~6的機率是七成,產生7~9的機率是3成
11/16 10:43, 4F

11/16 10:43, , 5F
這樣就可以分成七三
11/16 10:43, 5F

11/16 10:53, , 6F
來試看看,感謝~
11/16 10:53, 6F

11/16 10:54, , 7F
diabloevagto 但是此機率要怎麼控制?
11/16 10:54, 7F

11/16 10:59, , 8F
產生有7個1, 3個2的陣列, 再隨機從陣列中抓一個元素
11/16 10:59, 8F

11/16 11:00, , 9F
可是沒有什麼數學公式可以套用的嗎?
11/16 11:00, 9F

11/16 11:01, , 10F
如果數字大的話,陣列就要加大了..可能數字小的時後
11/16 11:01, 10F

11/16 11:01, , 11F
是個好方法
11/16 11:01, 11F

11/16 11:02, , 12F
好像也不會加大,我在胡言亂語,不要理我= =
11/16 11:02, 12F

11/16 11:05, , 13F
我有想過shadow的方法,但是不可行.網上有數學公式,但是
11/16 11:05, 13F

11/16 11:06, , 14F
是產生0~1的常態分佈
11/16 11:06, 14F

11/16 11:22, , 15F
如果這樣呢http://codepad.org/dy2I7v3F 寫得有點醜
11/16 11:22, 15F
謝謝您~不過程式碼我要好好看一下~感謝..

11/16 11:24, , 16F
先隨機集合再從集合中取數字 要簡化的話 就是把集合拆
11/16 11:24, 16F

11/16 11:25, , 17F
開 然後機率分配到集合中的每個數字?
11/16 11:25, 17F

11/16 11:27, , 18F
請問a大說的不可行是指?
11/16 11:27, 18F

11/16 11:28, , 19F
http://codepad.org/M8PmxbyD 原po參考一下吧
11/16 11:28, 19F
可是這個程式碼,是不是都固定前面7次,也就是七成,都是產生一樣的數字, 這樣子有亂數產生到嗎@@?,好像真正做用的只有後面三成(三次)而已~

11/16 11:29, , 20F
3個2的陣列<--這樣就不是亂數了.實際上我也傾向先塞值
11/16 11:29, 20F

11/16 11:29, , 21F
到陣列之後再洗牌.
11/16 11:29, 21F

11/16 11:30, , 22F
謝謝各位前輩幫忙,我來研究一下,謝謝。
11/16 11:30, 22F

11/16 11:30, , 23F
噢 有誤解 我只是提供怎麼完成1F "七三分" 的部分
11/16 11:30, 23F

11/16 11:31, , 24F
抓出1或2之後要再處理呀
11/16 11:31, 24F
※ 編輯: bernachom 來自: 114.36.157.230 (11/16 11:40) ※ 編輯: bernachom 來自: 114.36.157.230 (11/16 11:43)

11/16 11:43, , 25F
請自己想之後該怎麼處理.
11/16 11:43, 25F

11/16 11:43, , 26F
感謝,有想法了~
11/16 11:43, 26F

11/16 11:57, , 27F
我只是想玩物件導向才寫一大堆喔..請自己簡化(遮臉
11/16 11:57, 27F

11/16 11:59, , 28F
TO a大,http://codepad.org/8kxvic2N 最下面有顯示
11/16 11:59, 28F

11/16 11:59, , 29F
1跟其他的機率
11/16 11:59, 29F

11/16 12:00, , 30F
我把次數到1萬以上之後,差不多就7比3
11/16 12:00, 30F

11/16 12:10, , 31F
謝謝 diabloevagto大指導^_^
11/16 12:10, 31F

11/16 22:13, , 32F
陣列裡放21個1、2~10各1個 取第(rand()%30)項
11/16 22:13, 32F

11/16 23:52, , 33F
推1~3F L大的方法, 幾乎忘了當初怎樣寫機率累積分布了XD
11/16 23:52, 33F

11/19 14:47, , 34F
同1F.先取1~10000. >7000則再Ran出2~10,<=7000則得到1
11/19 14:47, 34F
文章代碼(AID): #1Emns04W (C_and_CPP)