Re: [問題] 平均的亂數產生數字個數 C++
※ 引述《bernachom (Terry)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++
: 問題(Question):
: 請教一下
: 我要產生四個數字1, 2, 3, 4
: 是採用亂數產生的方式,最少1個,最多4個
: EX: 1+rand()%(4);
: 如果我要產生100個,那每個數字就會出現25次(100/4 =25)
: 90個的話,那每個數字就會出現22.5次(進位變23次) (90/4 = 22.5)
: 80個的話,每個數字就對出現20次 (80/4 =20)
: 我目前的想法是用四個變數各別存下這幾個數字
: 產生過的就加一
: 然後再加上if的判斷
: 如果超過所需要的次數,就不會再產生了
: 但是這樣子方法效率似乎有點差...
: 每產生一個數字就要做一堆判斷
: 想詢問前輩們,不知道有沒有比較聰明的方法
: 謝謝指導了。
先準備一個 array 個數為你要的個數
依序重覆填入 1,2,3,4
利用亂數種子取得這次的 array index 得其值後
將之與這個 array 最後一個有效的 index 互相交換其值
並將 有效的個數減一 並利用亂數種子取得範圍內的 index ...
當有效的個數為 1 時 則你需要的亂數序列就完成了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.106.49
→
04/28 01:11, , 1F
04/28 01:11, 1F
→
04/28 08:29, , 2F
04/28 08:29, 2F
→
04/28 17:09, , 3F
04/28 17:09, 3F
→
04/28 17:42, , 4F
04/28 17:42, 4F
推
04/28 18:20, , 5F
04/28 18:20, 5F
→
04/28 18:20, , 6F
04/28 18:20, 6F
→
04/28 18:21, , 7F
04/28 18:21, 7F
→
04/28 18:22, , 8F
04/28 18:22, 8F
→
04/28 21:26, , 9F
04/28 21:26, 9F
→
05/01 14:53, , 10F
05/01 14:53, 10F
→
05/01 14:54, , 11F
05/01 14:54, 11F