teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

検討過程で書いたコードを追加

2019/03/22 03:37

投稿

wawawanet
wawawanet

スコア12

title CHANGED
File without changes
body CHANGED
@@ -2,4 +2,47 @@
2
2
  確率に準じてランダムに1つの値をリストから抽出する方法は
3
3
  https://qiita.com/mochizukikotaro/items/f93be343664a70c97c68
4
4
  の改変で実装できるのですが、
5
- 例えば確率に準じてランダムに""2つ""の値を重複なくリストから抽出するとなると、どのような実装が考えられるでしょうか?
5
+ 例えば確率に準じてランダムに""2つ""の値を重複なくリストから抽出するとなると、どのような実装が考えられるでしょうか?
6
+
7
+ ### 検討したこと
8
+ ```
9
+ void SelectDouble(int &n1, int &n2) {
10
+ int count = 5;
11
+ int per[count];
12
+ per[0] = 50;
13
+ per[1] = 25;
14
+ per[2] = 15;
15
+ per[3] = 5;
16
+ per[4] = 5;
17
+ int sum = 100; // per[0] + per[1] + per[2] + per[3] + per[4]
18
+
19
+ std::mt19937_64 mt;
20
+
21
+ int x = mt() % sum;
22
+ for(int i = 0; i < count; i++) {
23
+ if(x < per[i]) {
24
+ n1 = i;
25
+ while(true) {
26
+ int y = mt() % sum;
27
+ for(int j = 0; j < count; j++) {
28
+ if(y < per[j]) {
29
+ n2 = j;
30
+ if(n2 != n1) {
31
+ return;
32
+ }
33
+ }
34
+ else {
35
+ y -= per[j];
36
+ }
37
+ }
38
+ }
39
+ }
40
+ else {
41
+ x -= per[i];
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ 上記のコードは頭の悪い実装(もしかしたら実装すら出来ていない)ので、スマートな実装をご提示いただけると幸いです。
48
+ よろしくお願い致します。

1

タグついか

2019/03/22 03:37

投稿

wawawanet
wawawanet

スコア12

title CHANGED
File without changes
body CHANGED
File without changes