我在做硬币兑换的问题。我已经解决了这个问题,它会打印出我需要多少硬币来做最少的更改,但是我如何更改我的程序以便它也能打印这些硬币??在
以下是I/O示例:
input: coin_change(48, [1, 5, 10, 25, 50])
output: [6, [25, 10, 10, 1, 1, 1]]
input: coin_change(48, [1, 7, 24, 42])
output: [2, [24, 24]]
目前我的代码只返回6。在
顺便说一句,这只能用递归来完成。不允许循环。在
代码:
^{pr2}$下面的代码是我尝试过的,但是对于第二个输入它不起作用
def giveChange(C, V, res = None):
res=[] if res is None else res
if len(V)==0:
return len(res),res
maxx=max(V)
print maxx
V.remove(maxx)
ans=C//maxx
if ans==0 and maxx<C :
print maxx
res +=[maxx]*ans
return len(res),res
else:
res += [maxx]*ans
return giveChange(C % maxx,V,res)
您的第一个代码只需做一些更改即可工作。函数可以返回list甚至(count,[coins])元组,而不是只返回count。您可能还需要对V进行排序
可能不使用maxx=max(V)
最佳解决方案可以包括小硬币,例如48=24+24,其中有两个硬币,小于48=25+10+10+1+1+1。在这种情况下,虽然25>;24,你必须使用更多的小硬币,使48。在
因此,如果你的输入是(48,[1,7,24,42]),你将被困在第二种情况下,得到一个48=42+1+1+1+1+1+1+1。您可以将第二次发布的代码与第一次发布的代码相结合,添加一个列表作为存储更改的参数,并使用相同的递归设计。在
相关问题 更多 >
编程相关推荐