回答編集履歴

4

ルールの誤認識を修正

2017/02/20 05:36

投稿

退会済みユーザー
test CHANGED
@@ -16,13 +16,15 @@
16
16
 
17
17
  ひたすら トライ&エラー ということなので、全組み合わせをループで回すことになります。ただし、ループとしては、外側にある数字を使用してはイケない制限が発生するので、それをスキップする機構を組み込みます。
18
18
 
19
- 四則演算は、そのまま4通りなので、ループで回せばイイです。
19
+ 四則演算は、そのまま4通りなので、ループで回せばイイです。
20
20
 
21
21
 
22
22
 
23
23
  ===追記===
24
24
 
25
- 関数化すべき箇所が特定できればと思い、php でサンプルを作成してました。
25
+ ール勘違いしてました。計算方法は四則演算だけでなく、空白を含むのですね^^;
26
+
27
+ 回答を修正しました。
26
28
 
27
29
 
28
30
 
@@ -48,11 +50,11 @@
48
50
 
49
51
 
50
52
 
51
- `operation_combination` +-*/ の組み合わせを与えられた桁数分用意
53
+ `operation_combination` +-*/空白 の組み合わせを与えられた桁数分用意
52
-
54
+
53
- +-*/ を 1-4 の数字に置き換えて考えています。
55
+ +-*/空白 を 1-5 の数字に置き換えて考えています。
54
-
56
+
55
- 1-4 を桁数分の組み合わせで作成します。
57
+ 1-5 を桁数分の組み合わせで作成します。
56
58
 
57
59
  こんな数字が並びます。
58
60
 
@@ -98,9 +100,9 @@
98
100
 
99
101
  private $result_array =[];
100
102
 
101
- private $base_op_array = [1,2,3,4]; //1:+,2:-,3:*,4:/
103
+ private $base_op_array = [1,2,3,4,5]; //1:+,2:-,3:*,4:/,5:''
102
-
104
+
103
- private $count_base_op_array = 4;
105
+ private $count_base_op_array = 5;
104
106
 
105
107
  private $combination_op_array = [];
106
108
 
@@ -232,6 +234,12 @@
232
234
 
233
235
  }
234
236
 
237
+ if ((int)$op_array[$i-1] === 5){
238
+
239
+ $sum = $sum . $num_array[$i];
240
+
241
+ }
242
+
235
243
  }
236
244
 
237
245
  $result= eval("return {$sum};");
@@ -270,6 +278,8 @@
270
278
 
271
279
  1+2/3 = 1.6666666666667
272
280
 
281
+ 1+23 = 24
282
+
273
283
  1-2+3 = 2
274
284
 
275
285
  1-2-3 = -4
@@ -278,6 +288,8 @@
278
288
 
279
289
  1-2/3 = 0.33333333333333
280
290
 
291
+ 1-23 = -22
292
+
281
293
  1*2+3 = 5
282
294
 
283
295
  1*2-3 = -1
@@ -286,6 +298,8 @@
286
298
 
287
299
  1*2/3 = 0.66666666666667
288
300
 
301
+ 1*23 = 23
302
+
289
303
  1/2+3 = 3.5
290
304
 
291
305
  1/2-3 = -2.5
@@ -294,6 +308,18 @@
294
308
 
295
309
  1/2/3 = 0.16666666666667
296
310
 
311
+ 1/23 = 0.043478260869565
312
+
313
+ 12+3 = 15
314
+
315
+ 12-3 = 9
316
+
317
+ 12*3 = 36
318
+
319
+ 12/3 = 4
320
+
321
+ 123 = 123
322
+
297
323
  1+3+2 = 6
298
324
 
299
325
  1+3-2 = 2
@@ -302,6 +328,8 @@
302
328
 
303
329
  1+3/2 = 2.5
304
330
 
331
+ 1+32 = 33
332
+
305
333
  1-3+2 = 0
306
334
 
307
335
  1-3-2 = -4
@@ -310,6 +338,8 @@
310
338
 
311
339
  1-3/2 = -0.5
312
340
 
341
+ 1-32 = -31
342
+
313
343
  1*3+2 = 5
314
344
 
315
345
  1*3-2 = 1
@@ -318,6 +348,8 @@
318
348
 
319
349
  1*3/2 = 1.5
320
350
 
351
+ 1*32 = 32
352
+
321
353
  1/3+2 = 2.3333333333333
322
354
 
323
355
  1/3-2 = -1.6666666666667
@@ -326,6 +358,18 @@
326
358
 
327
359
  1/3/2 = 0.16666666666667
328
360
 
361
+ 1/32 = 0.03125
362
+
363
+ 13+2 = 15
364
+
365
+ 13-2 = 11
366
+
367
+ 13*2 = 26
368
+
369
+ 13/2 = 6.5
370
+
371
+ 132 = 132
372
+
329
373
  2+1+3 = 6
330
374
 
331
375
  2+1-3 = 0
@@ -334,6 +378,8 @@
334
378
 
335
379
  2+1/3 = 2.3333333333333
336
380
 
381
+ 2+13 = 15
382
+
337
383
  2-1+3 = 4
338
384
 
339
385
  2-1-3 = -2
@@ -342,6 +388,8 @@
342
388
 
343
389
  2-1/3 = 1.6666666666667
344
390
 
391
+ 2-13 = -11
392
+
345
393
  2*1+3 = 5
346
394
 
347
395
  2*1-3 = -1
@@ -350,6 +398,8 @@
350
398
 
351
399
  2*1/3 = 0.66666666666667
352
400
 
401
+ 2*13 = 26
402
+
353
403
  2/1+3 = 5
354
404
 
355
405
  2/1-3 = -1
@@ -358,6 +408,18 @@
358
408
 
359
409
  2/1/3 = 0.66666666666667
360
410
 
411
+ 2/13 = 0.15384615384615
412
+
413
+ 21+3 = 24
414
+
415
+ 21-3 = 18
416
+
417
+ 21*3 = 63
418
+
419
+ 21/3 = 7
420
+
421
+ 213 = 213
422
+
361
423
  2+3+1 = 6
362
424
 
363
425
  2+3-1 = 4
@@ -366,6 +428,8 @@
366
428
 
367
429
  2+3/1 = 5
368
430
 
431
+ 2+31 = 33
432
+
369
433
  2-3+1 = 0
370
434
 
371
435
  2-3-1 = -2
@@ -374,6 +438,8 @@
374
438
 
375
439
  2-3/1 = -1
376
440
 
441
+ 2-31 = -29
442
+
377
443
  2*3+1 = 7
378
444
 
379
445
  2*3-1 = 5
@@ -382,6 +448,8 @@
382
448
 
383
449
  2*3/1 = 6
384
450
 
451
+ 2*31 = 62
452
+
385
453
  2/3+1 = 1.6666666666667
386
454
 
387
455
  2/3-1 = -0.33333333333333
@@ -390,6 +458,18 @@
390
458
 
391
459
  2/3/1 = 0.66666666666667
392
460
 
461
+ 2/31 = 0.064516129032258
462
+
463
+ 23+1 = 24
464
+
465
+ 23-1 = 22
466
+
467
+ 23*1 = 23
468
+
469
+ 23/1 = 23
470
+
471
+ 231 = 231
472
+
393
473
  3+1+2 = 6
394
474
 
395
475
  3+1-2 = 2
@@ -398,6 +478,8 @@
398
478
 
399
479
  3+1/2 = 3.5
400
480
 
481
+ 3+12 = 15
482
+
401
483
  3-1+2 = 4
402
484
 
403
485
  3-1-2 = 0
@@ -406,6 +488,8 @@
406
488
 
407
489
  3-1/2 = 2.5
408
490
 
491
+ 3-12 = -9
492
+
409
493
  3*1+2 = 5
410
494
 
411
495
  3*1-2 = 1
@@ -414,6 +498,8 @@
414
498
 
415
499
  3*1/2 = 1.5
416
500
 
501
+ 3*12 = 36
502
+
417
503
  3/1+2 = 5
418
504
 
419
505
  3/1-2 = 1
@@ -422,6 +508,18 @@
422
508
 
423
509
  3/1/2 = 1.5
424
510
 
511
+ 3/12 = 0.25
512
+
513
+ 31+2 = 33
514
+
515
+ 31-2 = 29
516
+
517
+ 31*2 = 62
518
+
519
+ 31/2 = 15.5
520
+
521
+ 312 = 312
522
+
425
523
  3+2+1 = 6
426
524
 
427
525
  3+2-1 = 4
@@ -430,6 +528,8 @@
430
528
 
431
529
  3+2/1 = 5
432
530
 
531
+ 3+21 = 24
532
+
433
533
  3-2+1 = 2
434
534
 
435
535
  3-2-1 = 0
@@ -438,6 +538,8 @@
438
538
 
439
539
  3-2/1 = 1
440
540
 
541
+ 3-21 = -18
542
+
441
543
  3*2+1 = 7
442
544
 
443
545
  3*2-1 = 5
@@ -446,6 +548,8 @@
446
548
 
447
549
  3*2/1 = 6
448
550
 
551
+ 3*21 = 63
552
+
449
553
  3/2+1 = 2.5
450
554
 
451
555
  3/2-1 = 0.5
@@ -454,4 +558,16 @@
454
558
 
455
559
  3/2/1 = 1.5
456
560
 
561
+ 3/21 = 0.14285714285714
562
+
563
+ 32+1 = 33
564
+
565
+ 32-1 = 31
566
+
567
+ 32*1 = 32
568
+
569
+ 32/1 = 32
570
+
571
+ 321 = 321
572
+
457
573
  ```

3

追記

2017/02/20 05:36

投稿

退会済みユーザー
test CHANGED
@@ -17,3 +17,441 @@
17
17
  ひたすら トライ&エラー ということなので、全組み合わせをループで回すことになります。ただし、ループとしては、外側にある数字を使用してはイケない制限が発生するので、それをスキップする機構を組み込みます。
18
18
 
19
19
  四則演算は、そのまま4通りなので、ループで回せばイイです。
20
+
21
+
22
+
23
+ ===追記===
24
+
25
+ 関数化すべき箇所が特定できればと思い、php でサンプルを作成してみました。
26
+
27
+
28
+
29
+ 多分、再帰で全部記述することもできる気もしますが、ちょっと頭が追いつかなくなったので、大きく3部分に分けました。
30
+
31
+ otn さんの回答見ると、Ruby だと `create_number` と `operation_combination` に似た内容が関数化されてるんですかね。羨ましい。。。
32
+
33
+
34
+
35
+ ざっくりと解説すると
36
+
37
+
38
+
39
+ `create_number` 与えられた配列に対して、重複のない組み合わせの数字を作成
40
+
41
+ すでに使用した数字はスキップし、それ以外は桁数になるまで再帰することで作成しています。
42
+
43
+ こんな数字が並びます。
44
+
45
+ 123456789,
46
+
47
+ 123456798,
48
+
49
+
50
+
51
+ `operation_combination` +-*/ の組み合わせを与えられた桁数分用意
52
+
53
+ +-*/ を 1-4 の数字に置き換えて考えています。
54
+
55
+ 1-4 を桁数分の組み合わせで作成します。
56
+
57
+ こんな数字が並びます。
58
+
59
+ 111111111,
60
+
61
+ 111111112,
62
+
63
+
64
+
65
+ 意味は
66
+
67
+ +++++++++,
68
+
69
+ ++++++++-,
70
+
71
+
72
+
73
+ です。
74
+
75
+
76
+
77
+ `get_sum` ぐるぐる計算するところ
78
+
79
+ create_number と operation_combination で作成した配列を空になるまで計算しています。
80
+
81
+ 今回は、値の正当性を確認したかったので、0 のカウントとせず、式と合計値を表示するサンプルにしています。
82
+
83
+ 結局、eval のお世話になってしまいました^^;
84
+
85
+ 面白かったです。
86
+
87
+
88
+
89
+ ```php
90
+
91
+ <?php
92
+
93
+ class Komachi{
94
+
95
+ private $base_array;
96
+
97
+ private $count_base_array;
98
+
99
+ private $result_array =[];
100
+
101
+ private $base_op_array = [1,2,3,4]; //1:+,2:-,3:*,4:/
102
+
103
+ private $count_base_op_array = 4;
104
+
105
+ private $combination_op_array = [];
106
+
107
+
108
+
109
+ public function __construct($base_array) {
110
+
111
+ $this->base_array = $base_array;
112
+
113
+ $this->count_base_array = count($base_array);
114
+
115
+ }
116
+
117
+
118
+
119
+ public function result() {
120
+
121
+ return ($this->result_array);
122
+
123
+ }
124
+
125
+
126
+
127
+ public function combination_op_array() {
128
+
129
+ return ($this->combination_op_array);
130
+
131
+ }
132
+
133
+
134
+
135
+ public function create_number($org_number,$count){
136
+
137
+ for($i = 0 ; $i < $this->count_base_array ;$i++){
138
+
139
+ $org_number_array = str_split($org_number,1);
140
+
141
+ if (in_array($this->base_array[$i],$org_number_array)) {
142
+
143
+ continue;
144
+
145
+ }
146
+
147
+ $new_number = $org_number * 10 + $this->base_array[$i];
148
+
149
+ if ($count === $this->count_base_array){
150
+
151
+ $this->result_array[] = $new_number;
152
+
153
+ continue;
154
+
155
+ }
156
+
157
+ $this->create_number($new_number,$count+1);
158
+
159
+ }
160
+
161
+ }
162
+
163
+
164
+
165
+ public function operation_combination($org_number,$count){
166
+
167
+ for($i = 0 ; $i < $this->count_base_op_array ;$i++){
168
+
169
+ $new_number = $org_number * 10 + $this->base_op_array[$i];
170
+
171
+ if ($count === $this->count_base_array-1){
172
+
173
+ $this->combination_op_array[] = $new_number;
174
+
175
+ continue;
176
+
177
+ }
178
+
179
+ $this->operation_combination($new_number,$count+1);
180
+
181
+ }
182
+
183
+ }
184
+
185
+
186
+
187
+ public function get_sum(){
188
+
189
+ $this->create_number(0,1);
190
+
191
+ $this->operation_combination(0,1);
192
+
193
+ foreach($this->result_array as $num){
194
+
195
+ $num_array = str_split($num,1);
196
+
197
+ foreach($this->combination_op_array as $combination_op){
198
+
199
+ $op_array = str_split($combination_op,1);
200
+
201
+ for($i = 0 ; $i < $this->count_base_array ;$i++){
202
+
203
+ if($i === 0){
204
+
205
+ $sum = $num_array[$i];
206
+
207
+ continue;
208
+
209
+ }
210
+
211
+ if ((int)$op_array[$i-1] === 1){
212
+
213
+ $sum = $sum . '+'.$num_array[$i];
214
+
215
+ }
216
+
217
+ if ((int)$op_array[$i-1] === 2){
218
+
219
+ $sum = $sum . '-'.$num_array[$i];
220
+
221
+ }
222
+
223
+ if ((int)$op_array[$i-1] === 3){
224
+
225
+ $sum = $sum . '*'.$num_array[$i];
226
+
227
+ }
228
+
229
+ if ((int)$op_array[$i-1] === 4){
230
+
231
+ $sum = $sum . '/'. $num_array[$i];
232
+
233
+ }
234
+
235
+ }
236
+
237
+ $result= eval("return {$sum};");
238
+
239
+ echo $sum . ' = ' . $result . PHP_EOL;
240
+
241
+ }
242
+
243
+ }
244
+
245
+ }
246
+
247
+ }
248
+
249
+
250
+
251
+ // $tmp = new Komachi([1,2,3,4,5,6,7,8,9]);
252
+
253
+ $komachi = new Komachi([1,2,3]);
254
+
255
+ $komachi->get_sum();
256
+
257
+ ```
258
+
259
+
260
+
261
+ 以下、[1,2,3] の結果です。
262
+
263
+ ```
264
+
265
+ 1+2+3 = 6
266
+
267
+ 1+2-3 = 0
268
+
269
+ 1+2*3 = 7
270
+
271
+ 1+2/3 = 1.6666666666667
272
+
273
+ 1-2+3 = 2
274
+
275
+ 1-2-3 = -4
276
+
277
+ 1-2*3 = -5
278
+
279
+ 1-2/3 = 0.33333333333333
280
+
281
+ 1*2+3 = 5
282
+
283
+ 1*2-3 = -1
284
+
285
+ 1*2*3 = 6
286
+
287
+ 1*2/3 = 0.66666666666667
288
+
289
+ 1/2+3 = 3.5
290
+
291
+ 1/2-3 = -2.5
292
+
293
+ 1/2*3 = 1.5
294
+
295
+ 1/2/3 = 0.16666666666667
296
+
297
+ 1+3+2 = 6
298
+
299
+ 1+3-2 = 2
300
+
301
+ 1+3*2 = 7
302
+
303
+ 1+3/2 = 2.5
304
+
305
+ 1-3+2 = 0
306
+
307
+ 1-3-2 = -4
308
+
309
+ 1-3*2 = -5
310
+
311
+ 1-3/2 = -0.5
312
+
313
+ 1*3+2 = 5
314
+
315
+ 1*3-2 = 1
316
+
317
+ 1*3*2 = 6
318
+
319
+ 1*3/2 = 1.5
320
+
321
+ 1/3+2 = 2.3333333333333
322
+
323
+ 1/3-2 = -1.6666666666667
324
+
325
+ 1/3*2 = 0.66666666666667
326
+
327
+ 1/3/2 = 0.16666666666667
328
+
329
+ 2+1+3 = 6
330
+
331
+ 2+1-3 = 0
332
+
333
+ 2+1*3 = 5
334
+
335
+ 2+1/3 = 2.3333333333333
336
+
337
+ 2-1+3 = 4
338
+
339
+ 2-1-3 = -2
340
+
341
+ 2-1*3 = -1
342
+
343
+ 2-1/3 = 1.6666666666667
344
+
345
+ 2*1+3 = 5
346
+
347
+ 2*1-3 = -1
348
+
349
+ 2*1*3 = 6
350
+
351
+ 2*1/3 = 0.66666666666667
352
+
353
+ 2/1+3 = 5
354
+
355
+ 2/1-3 = -1
356
+
357
+ 2/1*3 = 6
358
+
359
+ 2/1/3 = 0.66666666666667
360
+
361
+ 2+3+1 = 6
362
+
363
+ 2+3-1 = 4
364
+
365
+ 2+3*1 = 5
366
+
367
+ 2+3/1 = 5
368
+
369
+ 2-3+1 = 0
370
+
371
+ 2-3-1 = -2
372
+
373
+ 2-3*1 = -1
374
+
375
+ 2-3/1 = -1
376
+
377
+ 2*3+1 = 7
378
+
379
+ 2*3-1 = 5
380
+
381
+ 2*3*1 = 6
382
+
383
+ 2*3/1 = 6
384
+
385
+ 2/3+1 = 1.6666666666667
386
+
387
+ 2/3-1 = -0.33333333333333
388
+
389
+ 2/3*1 = 0.66666666666667
390
+
391
+ 2/3/1 = 0.66666666666667
392
+
393
+ 3+1+2 = 6
394
+
395
+ 3+1-2 = 2
396
+
397
+ 3+1*2 = 5
398
+
399
+ 3+1/2 = 3.5
400
+
401
+ 3-1+2 = 4
402
+
403
+ 3-1-2 = 0
404
+
405
+ 3-1*2 = 1
406
+
407
+ 3-1/2 = 2.5
408
+
409
+ 3*1+2 = 5
410
+
411
+ 3*1-2 = 1
412
+
413
+ 3*1*2 = 6
414
+
415
+ 3*1/2 = 1.5
416
+
417
+ 3/1+2 = 5
418
+
419
+ 3/1-2 = 1
420
+
421
+ 3/1*2 = 6
422
+
423
+ 3/1/2 = 1.5
424
+
425
+ 3+2+1 = 6
426
+
427
+ 3+2-1 = 4
428
+
429
+ 3+2*1 = 5
430
+
431
+ 3+2/1 = 5
432
+
433
+ 3-2+1 = 2
434
+
435
+ 3-2-1 = 0
436
+
437
+ 3-2*1 = 1
438
+
439
+ 3-2/1 = 1
440
+
441
+ 3*2+1 = 7
442
+
443
+ 3*2-1 = 5
444
+
445
+ 3*2*1 = 6
446
+
447
+ 3*2/1 = 6
448
+
449
+ 3/2+1 = 2.5
450
+
451
+ 3/2-1 = 0.5
452
+
453
+ 3/2*1 = 1.5
454
+
455
+ 3/2/1 = 1.5
456
+
457
+ ```

2

追記の明記

2017/02/20 05:27

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- こちらの変則型の質問(数字の並び方を固定せず、解を0とする)と理解しました。
13
+ こちらの変則型の質問(数字の並び方を固定せず(←指摘があり追記しました。)、解を0とする)と理解しました。
14
14
 
15
15
 
16
16
 

1

質問の理解を修正

2017/02/17 12:38

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- こちらの変則型の質問(解を0とする)と理解しました。
13
+ こちらの変則型の質問(数字の並び方を固定せず、解を0とする)と理解しました。
14
14
 
15
15
 
16
16