質問編集履歴
5
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -116,7 +116,7 @@
|
|
116
116
|
|
117
117
|
【更に追記】
|
118
118
|
|
119
|
-
baseballyamaさんの回答を元に書いた、再帰無しのコードです。一応再帰無しで同等の処理が実現できましたので解決済みとします。
|
119
|
+
baseballyamaさんの回答を元に書いた、再帰無しのコードです。一応再帰無しで同等の処理が実現できましたので解決済みとします。回答してくださった皆様、ありがとうございました!ただ、僕としては、maxが2桁以上の場合でも正常に動作してほしいですし、再帰処理を再帰無しで記述する「普遍的な」方法を知りたかったです。その方法を知れれば、機械的に再帰無しコードに書き換えられるような…そんなメソッドが知りたかったのです。
|
120
120
|
|
121
121
|
|
122
122
|
|
4
再帰無しのコード追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -111,3 +111,105 @@
|
|
111
111
|
【追記】
|
112
112
|
|
113
113
|
長さと最大値は可変にしたいです。最小値は、とりあえずは1で固定です。
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
【更に追記】
|
118
|
+
|
119
|
+
baseballyamaさんの回答を元に書いた、再帰無しのコードです。一応再帰無しで同等の処理が実現できましたので解決済みとします。解凍してくださった皆様、ありがとうございました!ただ、僕としては、maxが2桁以上の場合でも正常に動作してほしいですし、再帰処理を再帰無しで記述する「普遍的な」方法を知りたかったです。その方法を知れれば、機械的に再帰無しコードに書き換えられるような…そんなメソッドが知りたかったのです。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
```cpp
|
124
|
+
|
125
|
+
#include <iostream>
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
using namespace std;
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
void recurse(int len, int max)
|
134
|
+
|
135
|
+
{
|
136
|
+
|
137
|
+
// 数値型↔文字型の変換は、0x30を加算・減算することで行う
|
138
|
+
|
139
|
+
string smax = string(5, max + 0x30);
|
140
|
+
|
141
|
+
int imax = stoi(smax);
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
for (int i = 1; i <= imax; i++) {
|
146
|
+
|
147
|
+
bool flag = true;
|
148
|
+
|
149
|
+
string s = to_string(i);
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
for (int j = 0; j < s.size(); j++) {
|
154
|
+
|
155
|
+
// 要素が1以上max以下の条件を満たさない場合は出力しない
|
156
|
+
|
157
|
+
if (s[j] - 0x30 < 1 || s[j] - 0x30 > max) {
|
158
|
+
|
159
|
+
flag = false;
|
160
|
+
|
161
|
+
break;
|
162
|
+
|
163
|
+
}
|
164
|
+
|
165
|
+
// 左から右に昇順でない場合は出力しない
|
166
|
+
|
167
|
+
if (j > 0 && s[j - 1] > s[j]) {
|
168
|
+
|
169
|
+
flag = false;
|
170
|
+
|
171
|
+
break;
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
}
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
if (flag) {
|
180
|
+
|
181
|
+
cout << "[";
|
182
|
+
|
183
|
+
for (int j = 0; j < s.size(); j++) {
|
184
|
+
|
185
|
+
cout << s[j];
|
186
|
+
|
187
|
+
if (j < s.size() - 1) {
|
188
|
+
|
189
|
+
cout << ",";
|
190
|
+
|
191
|
+
}
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
cout << "]" << endl;
|
196
|
+
|
197
|
+
}
|
198
|
+
|
199
|
+
}
|
200
|
+
|
201
|
+
}
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
int main(void)
|
206
|
+
|
207
|
+
{
|
208
|
+
|
209
|
+
recurse(5, 9);
|
210
|
+
|
211
|
+
return 0;
|
212
|
+
|
213
|
+
}
|
214
|
+
|
215
|
+
```
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -105,3 +105,9 @@
|
|
105
105
|
}
|
106
106
|
|
107
107
|
```
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
【追記】
|
112
|
+
|
113
|
+
長さと最大値は可変にしたいです。最小値は、とりあえずは1で固定です。
|
2
なぜか更新できていなかったので再度更新
test
CHANGED
File without changes
|
test
CHANGED
@@ -33,44 +33,6 @@
|
|
33
33
|
|
34
34
|
|
35
35
|
```cpp
|
36
|
-
|
37
|
-
#include <iostream>
|
38
|
-
|
39
|
-
#include <vector>
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
using namespace std;
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
int LEN = 5;
|
48
|
-
|
49
|
-
int MAX = 9;
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
void recurse(vector<int> *v)
|
54
|
-
|
55
|
-
{
|
56
|
-
|
57
|
-
int start;
|
58
|
-
|
59
|
-
int i;
|
60
|
-
|
61
|
-
if (v->size() == LEN) {
|
62
|
-
|
63
|
-
printf("[%d,%d,%d,%d,%d]\n",v->at(0),v->at(1),v->at(2),v->at(3),v->at(4));
|
64
|
-
|
65
|
-
return;
|
66
|
-
|
67
|
-
}
|
68
|
-
|
69
|
-
if (v->size() == 0) {
|
70
|
-
|
71
|
-
start = 1;
|
72
|
-
|
73
|
-
} else {
|
74
36
|
|
75
37
|
#include <iostream>
|
76
38
|
|
1
printfを、配列の長さに対応させる
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,15 +72,55 @@
|
|
72
72
|
|
73
73
|
} else {
|
74
74
|
|
75
|
+
#include <iostream>
|
76
|
+
|
77
|
+
#include <vector>
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
using namespace std;
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
void recurse(vector<int> *v, int len, int max)
|
86
|
+
|
87
|
+
{
|
88
|
+
|
89
|
+
int start;
|
90
|
+
|
91
|
+
int i, j;
|
92
|
+
|
93
|
+
if (v->size() == len) {
|
94
|
+
|
95
|
+
cout << "[";
|
96
|
+
|
97
|
+
for (j = 0; j < len-1; j++) {
|
98
|
+
|
99
|
+
cout << v->at(j) << ",";
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
cout << v->at(len-1) << "]" << endl;
|
104
|
+
|
105
|
+
return;
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
if (v->size() == 0) {
|
110
|
+
|
111
|
+
start = 1;
|
112
|
+
|
113
|
+
} else {
|
114
|
+
|
75
115
|
start = v->back();
|
76
116
|
|
77
117
|
}
|
78
118
|
|
79
|
-
for (i = start; i <=
|
119
|
+
for (i = start; i <= max; i++) {
|
80
120
|
|
81
121
|
v->push_back(i);
|
82
122
|
|
83
|
-
recurse(v);
|
123
|
+
recurse(v, len, max);
|
84
124
|
|
85
125
|
v->pop_back();
|
86
126
|
|
@@ -96,7 +136,7 @@
|
|
96
136
|
|
97
137
|
vector<int> v;
|
98
138
|
|
99
|
-
recurse(&v);
|
139
|
+
recurse(&v, 5, 9);
|
100
140
|
|
101
141
|
return 0;
|
102
142
|
|