回答編集履歴
5
コードの改良
test
CHANGED
@@ -192,6 +192,16 @@
|
|
192
192
|
|
193
193
|
上記のコードにはバグがありました。調査します。
|
194
194
|
|
195
|
+
|
196
|
+
|
195
197
|
**追記3**
|
196
198
|
|
197
199
|
j < n を j < N に修正しました。
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
**追記4**
|
204
|
+
|
205
|
+
関数 generate の中の if (c == k) return; は、ここではなく、
|
206
|
+
|
207
|
+
再帰呼出しの generate(i + 2); の直後に置いたほうが、効率が良くなります。
|
4
バグの修正
test
CHANGED
@@ -138,7 +138,7 @@
|
|
138
138
|
|
139
139
|
else {
|
140
140
|
|
141
|
-
for (int j = i + 1; j <
|
141
|
+
for (int j = i + 1; j < N; j++) {
|
142
142
|
|
143
143
|
int t = a[j];
|
144
144
|
|
@@ -191,3 +191,7 @@
|
|
191
191
|
**追記2**
|
192
192
|
|
193
193
|
上記のコードにはバグがありました。調査します。
|
194
|
+
|
195
|
+
**追記3**
|
196
|
+
|
197
|
+
j < n を j < N に修正しました。
|
3
バグ発見
test
CHANGED
@@ -185,3 +185,9 @@
|
|
185
185
|
}
|
186
186
|
|
187
187
|
```
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
**追記2**
|
192
|
+
|
193
|
+
上記のコードにはバグがありました。調査します。
|
2
回答を追加
test
CHANGED
@@ -81,3 +81,107 @@
|
|
81
81
|
n が大きい時は、表示に時間がかかるので、次のようにファイルに出力しましょう。
|
82
82
|
|
83
83
|
$ echo 14 | ./a.out > result.txt
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
**追記**
|
88
|
+
|
89
|
+
意味が分かりました。
|
90
|
+
|
91
|
+
```C
|
92
|
+
|
93
|
+
#include <stdio.h>
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
#define N 68
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
int k; // 繰返し回数(kaisu)
|
102
|
+
|
103
|
+
int n; // 要素の番号(number)
|
104
|
+
|
105
|
+
int c; // 生成個数(count)
|
106
|
+
|
107
|
+
int a[N]; // 要素の列(array)
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
void generate(int i)
|
112
|
+
|
113
|
+
{
|
114
|
+
|
115
|
+
if (c == k) return;
|
116
|
+
|
117
|
+
if (i == N) {
|
118
|
+
|
119
|
+
if (++c == k) {
|
120
|
+
|
121
|
+
int p; // ペアの相手
|
122
|
+
|
123
|
+
for (i = 0; i < N; i += 2) {
|
124
|
+
|
125
|
+
printf(" (%d,%d)", a[i], a[i + 1]);
|
126
|
+
|
127
|
+
if (a[i + 1] == n) p = a[i];
|
128
|
+
|
129
|
+
else if (a[i] == n) p = a[ i + 1];
|
130
|
+
|
131
|
+
}
|
132
|
+
|
133
|
+
printf("\n %d の相手は %d\n\n", n, p);
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
}
|
138
|
+
|
139
|
+
else {
|
140
|
+
|
141
|
+
for (int j = i + 1; j < n; j++) {
|
142
|
+
|
143
|
+
int t = a[j];
|
144
|
+
|
145
|
+
for (int k = j - 1; k > i; k--) a[k + 1] = a[k];
|
146
|
+
|
147
|
+
a[i + 1] = t;
|
148
|
+
|
149
|
+
generate(i + 2);
|
150
|
+
|
151
|
+
for (int k = i + 1; k < j; k++) a[k] = a[k + 1];
|
152
|
+
|
153
|
+
a[j] = t;
|
154
|
+
|
155
|
+
}
|
156
|
+
|
157
|
+
}
|
158
|
+
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
int main(void)
|
164
|
+
|
165
|
+
{
|
166
|
+
|
167
|
+
while (1) {
|
168
|
+
|
169
|
+
printf("繰返し回数: ");
|
170
|
+
|
171
|
+
if (scanf("%d", &k) != 1) return 1;
|
172
|
+
|
173
|
+
printf("要素の番号: ");
|
174
|
+
|
175
|
+
if (scanf("%d", &n) != 1 || n < 1 || n > N) return 2;
|
176
|
+
|
177
|
+
for (int i = 0; i < N; i++) a[i] = i + 1;
|
178
|
+
|
179
|
+
c = 0;
|
180
|
+
|
181
|
+
generate(0);
|
182
|
+
|
183
|
+
}
|
184
|
+
|
185
|
+
}
|
186
|
+
|
187
|
+
```
|
1
for文の修正
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
int t = a[j];
|
46
46
|
|
47
|
-
for (int k = j; k > i
|
47
|
+
for (int k = j - 1; k > i; k--) a[k + 1] = a[k];
|
48
48
|
|
49
49
|
a[i + 1] = t;
|
50
50
|
|