質問編集履歴

5

誤字の修正

2017/12/31 07:52

投稿

toshiyan
toshiyan

スコア74

test CHANGED
File without changes
test CHANGED
@@ -116,7 +116,7 @@
116
116
 
117
117
  【更に追記】
118
118
 
119
- baseballyamaさんの回答を元に書いた、再帰無しのコードです。一応再帰無しで同等の処理が実現できましたので解決済みとします。解凍してくださった皆様、ありがとうございました!ただ、僕としては、maxが2桁以上の場合でも正常に動作してほしいですし、再帰処理を再帰無しで記述する「普遍的な」方法を知りたかったです。その方法を知れれば、機械的に再帰無しコードに書き換えられるような…そんなメソッドが知りたかったのです。
119
+ baseballyamaさんの回答を元に書いた、再帰無しのコードです。一応再帰無しで同等の処理が実現できましたので解決済みとします。回答してくださった皆様、ありがとうございました!ただ、僕としては、maxが2桁以上の場合でも正常に動作してほしいですし、再帰処理を再帰無しで記述する「普遍的な」方法を知りたかったです。その方法を知れれば、機械的に再帰無しコードに書き換えられるような…そんなメソッドが知りたかったのです。
120
120
 
121
121
 
122
122
 

4

再帰無しのコード追加

2017/12/31 07:52

投稿

toshiyan
toshiyan

スコア74

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

追記

2017/12/31 07:49

投稿

toshiyan
toshiyan

スコア74

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

なぜか更新できていなかったので再度更新

2017/12/31 04:15

投稿

toshiyan
toshiyan

スコア74

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を、配列の長さに対応させる

2017/12/31 04:10

投稿

toshiyan
toshiyan

スコア74

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 <= MAX; 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