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

回答編集履歴

2

再帰呼出しを使う解を追加

2019/10/11 21:30

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -41,4 +41,38 @@
41
41
  std::cout << " }\n";
42
42
  }
43
43
  }
44
+ ```
45
+ **追記2**
46
+ 再帰呼出しを使うと、
47
+ ```C++
48
+ #include <iostream>
49
+ #include <algorithm> // copy
50
+
51
+ const int N = 4; // N: 1, 2, 3, 4, 5, 6
52
+ const int M = 256; // NのN乗: 1, 4, 27, 256, 3125, 46656
53
+ int a[M][N], b[N], k = 0;
54
+
55
+ const int A = 1, B = 3, C = 4, D = 6, E = 7, F = 9;
56
+ const int n[] = { A, B, C, D, E, F };
57
+
58
+ void gen(int i)
59
+ {
60
+ if (i < N)
61
+ for (int j = 0; j < N; j++)
62
+ b[i] = n[j], gen(i + 1);
63
+ else
64
+ std::copy(b, b + N, a[k++]);
65
+ }
66
+
67
+ int main(void)
68
+ {
69
+ gen(0);
70
+
71
+ // 以下、確認
72
+ for (int i = 0; i < M; i++) {
73
+ std::cout << "a[" << i << "] = { " << a[i][0];
74
+ for (int j = 1; j < N; j++) std::cout << ", " << a[i][j];
75
+ std::cout << " }\n";
76
+ }
77
+ }
44
78
  ```

1

別解の追加

2019/10/11 21:30

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -15,4 +15,30 @@
15
15
  std::cout << "a[" << i << "] = { " << a[i][0] << ", "
16
16
  << a[i][1] << ", " << a[i][2] << ", " << a[i][3] << " }\n";
17
17
  }
18
+ ```
19
+
20
+ **追記**
21
+ 6通りの数値まで扱えるようにしてみました。
22
+ ```C++
23
+ #include <iostream>
24
+
25
+ const int N = 3; // N: 1, 2, 3, 4, 5, 6
26
+ const int M = 27; // NのN乗: 1, 4, 27, 256, 3125, 46656
27
+ int a[M][N];
28
+
29
+ int main()
30
+ {
31
+ int A = 1, B = 3, C = 4, D = 6, E = 7, F = 9;
32
+ int n[] = { A, B, C, D, E, F };
33
+
34
+ for (int i = 0; i < M; i++)
35
+ for (int v = i, j = N; --j >= 0; v /= N) a[i][j] = n[v % N];
36
+
37
+ // 以下、確認
38
+ for (int i = 0; i < M; i++) {
39
+ std::cout << "a[" << i << "] = { " << a[i][0];
40
+ for (int j = 1; j < N; j++) std::cout << ", " << a[i][j];
41
+ std::cout << " }\n";
42
+ }
43
+ }
18
44
  ```