Python硬币更改如此关闭
我在做找零钱的问题。我已经解决了这个问题,因为它会打印出我需要进行最少更改的硬币数量,但是我该如何更改程序以使其也打印那些硬币呢?
这是一个示例I/O
:
输入: coin_change(48, [1, 5, 10, 25, 50])
输出: [6, [25, 10, 10, 1, 1, 1]]
目前,我的代码仅返回6
。
顺便说一句,这只能通过递归来完成。 不允许循环
码:
def change(C, V):
def min_coins(i, aC):
if aC == 0:
return 0
elif i == -1 or aC < 0:
return float('inf')
else:
return min(min_coins(i-1, aC), 1 + min_coins(i, aC-V[i]))
return min_coins(len(V)-1, C)
-
程序的其他版本:
def change(C, V, res=None): res = [] if res is None else res if len(V) == 0: return len(res), res maxx = max(V) V.remove(maxx) ans = C//maxx if ans == 0 and maxx < C : res += [maxx] * ans return len(res), res else: res += [maxx] * ans return change(C % maxx, V, res) print change(48,[1, 5, 10, 25, 50]) print change(30,[25, 10, 2, 3, 1])
输出:
(6, [25, 10, 10, 1, 1, 1]) (3, [25, 3, 2])
PS:如果您愿意,我会添加一个说明。