回答編集履歴
4
2018/05/31 11:38の質疑結果を反映
test
CHANGED
@@ -28,6 +28,16 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
+
追記:
|
32
|
+
|
33
|
+
> 仕様が漏れておりました、ある数値を超える場合は不可となります。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
↑こちらを反映
|
38
|
+
|
39
|
+
|
40
|
+
|
31
41
|
```
|
32
42
|
|
33
43
|
// javascriptで実装
|
@@ -72,7 +82,9 @@
|
|
72
82
|
|
73
83
|
let div = Math.floor(goal / n);
|
74
84
|
|
85
|
+
//for(let i = 1; i < div + 2; i++){ // goalよりも大きい和を含む場合
|
86
|
+
|
75
|
-
for(let i = 1; i < div +
|
87
|
+
for(let i = 1; i < div + 1; i++){ // goalよりも大きい和を含まない場合
|
76
88
|
|
77
89
|
let arr = Array(i).fill(n);
|
78
90
|
|
3
ソースコード修正
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
// 重複する値を削除
|
66
66
|
|
67
|
-
numbers = numbers.
|
67
|
+
numbers = numbers.filter((n,i,arr)=>{return (i==0)||(arr[i-1]!=n);});
|
68
68
|
|
69
69
|
|
70
70
|
|
2
誤字修正
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
// 重複する値を削除
|
66
66
|
|
67
|
-
numbers = numbers.sort((n,i,arr)=>{return (
|
67
|
+
numbers = numbers.sort((n,i,arr)=>{return (i==0)||(arr[i-1]!=n);});
|
68
68
|
|
69
69
|
|
70
70
|
|
1
numbersに重複値があった場合の処理を追加
test
CHANGED
@@ -14,9 +14,9 @@
|
|
14
14
|
|
15
15
|
1.numbersを降順に並べ替え
|
16
16
|
|
17
|
-
2.numbersの
|
17
|
+
2.numbersの各要素で( goal <= number * n )となる最初のn(n>0)までの組み合わせを保持するNodeを作成
|
18
|
-
|
18
|
+
|
19
|
-
3.( goal > number * n )となるNodeだけ、「goal = goal - number * n」「 number = [2で使った要素よりも小さい数で再構成したnumbers]」として、1-3を再帰的に実行
|
19
|
+
3.( goal > number * n )となるNodeだけ、「goal = goal - number * n」「 numbers = [2で使った要素よりも小さい数で再構成したnumbers]」として、1-3を再帰的に実行
|
20
20
|
|
21
21
|
4.rootNodeから各Nodeまでで保持する数値の組み合わせをすべてリスト化
|
22
22
|
|
@@ -62,6 +62,10 @@
|
|
62
62
|
|
63
63
|
numbers = numbers.sort((a,b)=>{ return b-a; });
|
64
64
|
|
65
|
+
// 重複する値を削除
|
66
|
+
|
67
|
+
numbers = numbers.sort((n,i,arr)=>{return (n==0)||(arr[i-1]!=n);});
|
68
|
+
|
65
69
|
|
66
70
|
|
67
71
|
numbers.forEach((n)=>{
|