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

时间:2018-10-31 18:02:15

标签: python algorithm list function

我正在尝试返回一个数组,以求一个数字的总和。

因此,如果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个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))

3 个答案:

答案 0 :(得分:3)

以下迭代实现有效:

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]

答案 1 :(得分:0)

关键是在python中使用算术运算符。具体划分/和模量'%'

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

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

例如:

  • 143/200 = 0; 143%200 = 143
  • 移至下一个,143/100 = 1; 143%100 = 43

重复该过程,直到剩余为零

答案 2 :(得分:0)

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

我认为这就像是一项家庭作业,因此我没有为您提供代码。我希望这有帮助。