回答編集履歴

3

コメント修正

2020/01/28 15:05

投稿

pyxis
pyxis

スコア16

test CHANGED
@@ -1,6 +1,14 @@
1
- 模範解答コードのインデントをずらせば正しいコードになるのでその部分を修正し、
1
+ 質問内に書いた自分のコード
2
2
 
3
+ a = abs(total - goal)
4
+
5
+ b = abs(pre - goal)
6
+
7
+ を比較しているのですが、その比較は必要なく以下のように書けば十分であると気付きました。
8
+
3
- 組み合わせ出力出来るようコードを書き直てみました。
9
+ また、同値であった場合の組み合わせ出力るようしました。
10
+
11
+
4
12
 
5
13
 
6
14
 
@@ -48,7 +56,7 @@
48
56
 
49
57
  # total >= goal にならなかった組み合わせも必ず最後はpos == len(pref)となりここの分岐に入る
50
58
 
51
- if pos >= len(pref) or total >= goal:
59
+ if pos == len(pref) or total >= goal:
52
60
 
53
61
  # <=にすることで同値であっても表示
54
62
 

2

コメント修正

2020/01/28 15:05

投稿

pyxis
pyxis

スコア16

test CHANGED
@@ -5,6 +5,8 @@
5
5
 
6
6
 
7
7
  ```Python
8
+
9
+ # 近づける値
8
10
 
9
11
  goal = 10000000
10
12
 
@@ -42,9 +44,15 @@
42
44
 
43
45
  global ary, temp
44
46
 
47
+
48
+
49
+ # total >= goal にならなかった組み合わせも必ず最後はpos == len(pref)となりここの分岐に入る
50
+
45
51
  if pos >= len(pref) or total >= goal:
46
52
 
53
+ # <=にすることで同値であっても表示
54
+
47
- if abs(goal - total) < abs(goal - temp):
55
+ if abs(goal - total) <= abs(goal - temp):
48
56
 
49
57
  print(total, ary)
50
58
 
@@ -74,4 +82,6 @@
74
82
 
75
83
 
76
84
 
85
+
86
+
77
87
  ```

1

コードを簡略化

2020/01/28 14:51

投稿

pyxis
pyxis

スコア16

test CHANGED
@@ -1,14 +1,12 @@
1
- 本のコードのインデントをずらせば正しいコードになるので修正し、
1
+ 本の模範解答コードのインデントをずらせば正しいコードになるのでその部分を修正し、
2
2
 
3
- 組み合わせを出力るようコードを書てみました。
3
+ 組み合わせを出力出来るようコードを書き直してみました。
4
4
 
5
5
 
6
6
 
7
7
  ```Python
8
8
 
9
9
  goal = 10000000
10
-
11
- ary = []
12
10
 
13
11
 
14
12
 
@@ -34,35 +32,31 @@
34
32
 
35
33
 
36
34
 
37
- min_total = 0
35
+ temp = float('inf')
38
36
 
39
- temp = float('inf')
37
+ ary = []
40
38
 
41
39
 
42
40
 
43
41
  def search(total, pos):
44
42
 
45
- global min_total, ary, temp
43
+ global ary, temp
46
44
 
47
45
  if pos >= len(pref) or total >= goal:
48
46
 
49
- if abs(goal - min_total) < abs(goal - temp):
47
+ if abs(goal - total) < abs(goal - temp):
50
48
 
51
- print(min_total, ary)
49
+ print(total, ary)
52
50
 
53
- temp = min_total
51
+ temp = total
54
52
 
55
53
 
56
54
 
57
55
  return
58
56
 
59
- if total < goal:
60
-
61
- if abs(goal - (total + pref[pos])) < abs(goal - min_total):
62
-
63
- min_total = total + pref[pos]
64
57
 
65
58
 
59
+ else:
66
60
 
67
61
  ary.append(pref[pos])
68
62
 
@@ -76,7 +70,7 @@
76
70
 
77
71
  search(0, 0)
78
72
 
79
- print(min_total)
73
+
80
74
 
81
75
 
82
76