前提・実現したいこと
確率に準じてランダムに1つの値をリストから抽出する方法は
https://qiita.com/mochizukikotaro/items/f93be343664a70c97c68
の改変で実装できるのですが、
例えば確率に準じてランダムに""2つ""の値を重複なくリストから抽出するとなると、どのような実装が考えられるでしょうか?
検討したこと
void SelectDouble(int &n1, int &n2) { int count = 5; int per[count]; per[0] = 50; per[1] = 25; per[2] = 15; per[3] = 5; per[4] = 5; int sum = 100; // per[0] + per[1] + per[2] + per[3] + per[4] std::mt19937_64 mt; int x = mt() % sum; for(int i = 0; i < count; i++) { if(x < per[i]) { n1 = i; while(true) { int y = mt() % sum; for(int j = 0; j < count; j++) { if(y < per[j]) { n2 = j; if(n2 != n1) { return; } } else { y -= per[j]; } } } } else { x -= per[i]; } } }
上記のコードは頭の悪い実装(もしかしたら実装すら出来ていない)ので、スマートな実装をご提示いただけると幸いです。
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/22 03:26
2019/03/22 03:29
2019/03/22 03:50
2019/03/22 04:06