看板 Programming 關於我們 聯絡資訊
※ 引述《hirabbitt (兔子)》之銘言: : 有未知數量的紅球與綠球 : 希望給出紅球的機率是綠球的三倍 : 不知道應該怎麼做比較好 : 有想過先把紅綠球分開 : 然後再75%取紅的25%取綠的 : 但是因為數量有可能非常龐大 : 使用這種方式雖然精確度100%但是難以保證時間 : 另外也想過先用75%25%決定要紅球還綠球 : 目標確定後就一直取取到想要的顏色出現為止 : 但也可能紅綠球比例相差過大(例如1顆綠球配99999顆紅球) : 或根本沒有某色球而造成無窮迴圈 : 考慮到根本沒有某色球的情況 : 精確度其實沒有要求到100% : 目前我的想法是每次都決定要紅球還綠球(一樣用75%25%) : 然後再去取球 : 取出錯的顏色時就用75%25%重新決定要紅球還綠球 : 不知道有沒有其他更好的方式? : 感謝 int n = totalNum; int redTotal = ((totalNum*3)/4); // total number of red ball // 3/4 of total ball in your case while (n>0) { r = rand()*n; if (r<redTotal){ isRedBall(); redTotal --; }else{ isGreenBall(); } n--; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.34.253.77
hirabbitt:redTotal不一定是((totalNum*3)/4)耶 60.248.111.82 06/03 09:36
goliathplus:要1:3不是? 也可以改成其他需要的值 211.22.107.139 06/03 17:03
hirabbitt:預期產出要1:3 但是原集合非1:3 60.248.111.82 06/04 11:28
hirabbitt:喔喔大概懂你的意思了 isRedBall是去取 60.248.111.82 06/04 11:31
hirabbitt:紅球對吧 但現在卡在紅球可能很少或根本 60.248.111.82 06/04 11:32
hirabbitt:沒有紅球 那isRedBall就會跑很久或卡住 60.248.111.82 06/04 11:32