回答編集履歴

2

微修正

2018/06/16 07:42

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -10,8 +10,6 @@
10
10
 
11
11
  ```C
12
12
 
13
- // data[0]~data[size-1]のナカミを(乱数使って)デタラメに入れ換える
14
-
15
13
  #include <stdlib.h>
16
14
 
17
15
  #include <stdio.h>
@@ -19,6 +17,8 @@
19
17
  #include <time.h>
20
18
 
21
19
 
20
+
21
+ // data[0]~data[size-1]のナカミを(乱数使って)デタラメに入れ換える
22
22
 
23
23
  void shuffle(int data[], int size) {
24
24
 
@@ -87,3 +87,5 @@
87
87
  */
88
88
 
89
89
  ```
90
+
91
+ ※ C++なら std::shuffle(index, index+15, mt19937()); の一行で済むんだが...

1

追記

2018/06/16 07:42

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -3,3 +3,87 @@
3
3
  - 上記 index[0]~index[14]のナカミを(乱数使って)デタラメに入れ換える
4
4
 
5
5
  - i = 0,1,2... に対し moji4[index[i]] を使う
6
+
7
+
8
+
9
+ [追記]
10
+
11
+ ```C
12
+
13
+ // data[0]~data[size-1]のナカミを(乱数使って)デタラメに入れ換える
14
+
15
+ #include <stdlib.h>
16
+
17
+ #include <stdio.h>
18
+
19
+ #include <time.h>
20
+
21
+
22
+
23
+ void shuffle(int data[], int size) {
24
+
25
+ int i;
26
+
27
+ for ( int i = 0; i < size; ++i ) {
28
+
29
+ int pos = rand() % (size-i);
30
+
31
+ // data[pos] と data[size-i-1] を入れ換える
32
+
33
+ int tmp = data[size-i-1];
34
+
35
+ data[size-i-1] = data[pos];
36
+
37
+ data[pos] = tmp;
38
+
39
+ }
40
+
41
+ }
42
+
43
+
44
+
45
+ // おためし
46
+
47
+ int main() {
48
+
49
+ int index[15];
50
+
51
+ int i;
52
+
53
+ // index[] を 0,1,2... で埋める
54
+
55
+ for ( i = 0; i < 15; ++i ) {
56
+
57
+ index[i] = i;
58
+
59
+ }
60
+
61
+ // indexをかきまぜる
62
+
63
+ srand((unsigned int)(time(NULL)));
64
+
65
+ shuffle(index, 15);
66
+
67
+ // 結果確認
68
+
69
+ for ( i = 0; i < 15; ++i ) {
70
+
71
+ printf("%2d ", index[i]);
72
+
73
+ }
74
+
75
+ printf("\n");
76
+
77
+ return 0;
78
+
79
+ }
80
+
81
+
82
+
83
+ /* 実行結果
84
+
85
+ 14 2 12 9 1 5 8 0 3 6 7 11 13 10 4
86
+
87
+ */
88
+
89
+ ```