Python挑战者

2024-10-01 02:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做硬币兑换的问题。我已经解决了这个问题,它会打印出我需要多少硬币来做最少的更改,但是我如何更改我的程序以便它也能打印这些硬币??在

以下是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)

Tags: 代码noneinputoutputlenreturnifres
2条回答

您的第一个代码只需做一些更改即可工作。函数可以返回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。您可以将第二次发布的代码与第一次发布的代码相结合,添加一个列表作为存储更改的参数,并使用相同的递归设计。在

相关问题 更多 >