質問編集履歴

2

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

2019/03/22 03:37

投稿

wawawanet
wawawanet

スコア12

test CHANGED
File without changes
test CHANGED
@@ -7,3 +7,89 @@
7
7
  の改変で実装できるのですが、
8
8
 
9
9
  例えば確率に準じてランダムに""2つ""の値を重複なくリストから抽出するとなると、どのような実装が考えられるでしょうか?
10
+
11
+
12
+
13
+ ### 検討したこと
14
+
15
+ ```
16
+
17
+ void SelectDouble(int &n1, int &n2) {
18
+
19
+ int count = 5;
20
+
21
+ int per[count];
22
+
23
+ per[0] = 50;
24
+
25
+ per[1] = 25;
26
+
27
+ per[2] = 15;
28
+
29
+ per[3] = 5;
30
+
31
+ per[4] = 5;
32
+
33
+ int sum = 100; // per[0] + per[1] + per[2] + per[3] + per[4]
34
+
35
+
36
+
37
+ std::mt19937_64 mt;
38
+
39
+
40
+
41
+ int x = mt() % sum;
42
+
43
+ for(int i = 0; i < count; i++) {
44
+
45
+ if(x < per[i]) {
46
+
47
+ n1 = i;
48
+
49
+ while(true) {
50
+
51
+ int y = mt() % sum;
52
+
53
+ for(int j = 0; j < count; j++) {
54
+
55
+ if(y < per[j]) {
56
+
57
+ n2 = j;
58
+
59
+ if(n2 != n1) {
60
+
61
+ return;
62
+
63
+ }
64
+
65
+ }
66
+
67
+ else {
68
+
69
+ y -= per[j];
70
+
71
+ }
72
+
73
+ }
74
+
75
+ }
76
+
77
+ }
78
+
79
+ else {
80
+
81
+ x -= per[i];
82
+
83
+ }
84
+
85
+ }
86
+
87
+ }
88
+
89
+ ```
90
+
91
+
92
+
93
+ 上記のコードは頭の悪い実装(もしかしたら実装すら出来ていない)ので、スマートな実装をご提示いただけると幸いです。
94
+
95
+ よろしくお願い致します。

1

タグついか

2019/03/22 03:37

投稿

wawawanet
wawawanet

スコア12

test CHANGED
File without changes
test CHANGED
File without changes