以数组形式返回该位置所需的硬币数

2024-09-26 18:20:44 发布

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

我试图返回一个数组中一个数的总和所需的硬币数。你知道吗

因此,如果m是143,coin=[200,100,50,20,10,5,2,1],它将返回[0,1,0,2,0,0,1,1],表示没有200个硬币,一个100个硬币,没有50个硬币,两个20个硬币,没有10个硬币,没有5个硬币,一个2个硬币和一个1个硬币。你知道吗

现在我的解决方案返回5,这是硬币的计数。你知道吗

        def coinSplit(m):
            if m == 0:
                return 0
            for i in range(len(coin)):
                if coin[i] <= m:
                    return 1 + coinSplit(m-coin[i])

      coin = [200, 100, 50, 20, 10, 5, 2, 1]
      print(coinSplit(143))

Tags: inforlenreturnifdefrange硬币
3条回答

关键是在python中使用算术运算符。特别是除法/和模“%”

通过遍历列表直到余数为零来获得商和余数。你知道吗

硬币=[200,100,50,20,10,5,2,1]

例如:

  • 143/200=0;143%200=143
  • 转到下一个,143/100=1;143%100=43

重复这个过程直到余数为零

以下迭代实现工作:

def coinSplit(m):
    res = []
    for c in coin:
        num = m // c
        m = m % c
        res.append(num)
    return res

>>> coinSplit(143)
[0, 1, 0, 2, 0, 0, 1, 1]

这假设一个硬币池,这种贪婪的方法总是产生一个结果。 如果希望递归,可以尝试:

def coinSplit(m, coins):
    if m == 0:
        return [0 for coin in coins]
    return [m // coins[0]] + coinSplit(m % coins[0], coins[1:])

>>> coinSplit(143, [200, 100, 50, 20, 10, 5, 2, 1])
[0, 1, 0, 2, 0, 0, 1, 1]

您将返回所需的总硬币数,而不考虑其价值。您需要跟踪每个硬币的编号,我假设您希望创建一个与输入大小相同的列表(coin = [200, 100, 50, 20, 10, 5, 2, 1]),并用零初始化它,作为另一个答案,使用模数添加到正确的索引中,然后返回此列表。您仍然可以将其编写为递归,但需要另一个操作来添加正确的索引。你知道吗

我认为这就像一个家庭作业,所以我不提供代码给你。我希望这有帮助。你知道吗

相关问题 更多 >

    热门问题