回答編集履歴
5
コードの改良
answer
CHANGED
@@ -95,5 +95,10 @@
|
|
95
95
|
|
96
96
|
**追記2**
|
97
97
|
上記のコードにはバグがありました。調査します。
|
98
|
+
|
98
99
|
**追記3**
|
99
|
-
j < n を j < N に修正しました。
|
100
|
+
j < n を j < N に修正しました。
|
101
|
+
|
102
|
+
**追記4**
|
103
|
+
関数 generate の中の if (c == k) return; は、ここではなく、
|
104
|
+
再帰呼出しの generate(i + 2); の直後に置いたほうが、効率が良くなります。
|
4
バグの修正
answer
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
else {
|
71
|
-
for (int j = i + 1; j <
|
71
|
+
for (int j = i + 1; j < N; j++) {
|
72
72
|
int t = a[j];
|
73
73
|
for (int k = j - 1; k > i; k--) a[k + 1] = a[k];
|
74
74
|
a[i + 1] = t;
|
@@ -94,4 +94,6 @@
|
|
94
94
|
```
|
95
95
|
|
96
96
|
**追記2**
|
97
|
-
上記のコードにはバグがありました。調査します。
|
97
|
+
上記のコードにはバグがありました。調査します。
|
98
|
+
**追記3**
|
99
|
+
j < n を j < N に修正しました。
|
3
バグ発見
answer
CHANGED
@@ -91,4 +91,7 @@
|
|
91
91
|
generate(0);
|
92
92
|
}
|
93
93
|
}
|
94
|
-
```
|
94
|
+
```
|
95
|
+
|
96
|
+
**追記2**
|
97
|
+
上記のコードにはバグがありました。調査します。
|
2
回答を追加
answer
CHANGED
@@ -39,4 +39,56 @@
|
|
39
39
|
}
|
40
40
|
```
|
41
41
|
n が大きい時は、表示に時間がかかるので、次のようにファイルに出力しましょう。
|
42
|
-
$ echo 14 | ./a.out > result.txt
|
42
|
+
$ echo 14 | ./a.out > result.txt
|
43
|
+
|
44
|
+
**追記**
|
45
|
+
意味が分かりました。
|
46
|
+
```C
|
47
|
+
#include <stdio.h>
|
48
|
+
|
49
|
+
#define N 68
|
50
|
+
|
51
|
+
int k; // 繰返し回数(kaisu)
|
52
|
+
int n; // 要素の番号(number)
|
53
|
+
int c; // 生成個数(count)
|
54
|
+
int a[N]; // 要素の列(array)
|
55
|
+
|
56
|
+
void generate(int i)
|
57
|
+
{
|
58
|
+
if (c == k) return;
|
59
|
+
if (i == N) {
|
60
|
+
if (++c == k) {
|
61
|
+
int p; // ペアの相手
|
62
|
+
for (i = 0; i < N; i += 2) {
|
63
|
+
printf(" (%d,%d)", a[i], a[i + 1]);
|
64
|
+
if (a[i + 1] == n) p = a[i];
|
65
|
+
else if (a[i] == n) p = a[ i + 1];
|
66
|
+
}
|
67
|
+
printf("\n %d の相手は %d\n\n", n, p);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
else {
|
71
|
+
for (int j = i + 1; j < n; j++) {
|
72
|
+
int t = a[j];
|
73
|
+
for (int k = j - 1; k > i; k--) a[k + 1] = a[k];
|
74
|
+
a[i + 1] = t;
|
75
|
+
generate(i + 2);
|
76
|
+
for (int k = i + 1; k < j; k++) a[k] = a[k + 1];
|
77
|
+
a[j] = t;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
int main(void)
|
83
|
+
{
|
84
|
+
while (1) {
|
85
|
+
printf("繰返し回数: ");
|
86
|
+
if (scanf("%d", &k) != 1) return 1;
|
87
|
+
printf("要素の番号: ");
|
88
|
+
if (scanf("%d", &n) != 1 || n < 1 || n > N) return 2;
|
89
|
+
for (int i = 0; i < N; i++) a[i] = i + 1;
|
90
|
+
c = 0;
|
91
|
+
generate(0);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
```
|
1
for文の修正
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
else {
|
22
22
|
for (int j = i + 1; j < n; j++) {
|
23
23
|
int t = a[j];
|
24
|
-
for (int k = j; k > i
|
24
|
+
for (int k = j - 1; k > i; k--) a[k + 1] = a[k];
|
25
25
|
a[i + 1] = t;
|
26
26
|
generate(i + 2);
|
27
27
|
for (int k = i + 1; k < j; k++) a[k] = a[k + 1];
|