需要一个在python中给定的最小硬币数代码失败的测试用例吗?

需要一个在python中给定的最小硬币数代码失败的测试用例吗?,python,function,optimization,python-2.7,Python,Function,Optimization,Python 2.7,以下是计算给定金额变化的代码: 然而,该代码并不是为了给出兑换金额的最低硬币数量,但代码似乎给出了所需的最低硬币数量。我想要一个案例,它不能给出所需的最低数量的硬币 def change(amount): money = () for coin in [25,10,5,1]: num = amount/coin money += (coin,) * num amount -= coin * num return money

以下是计算给定金额变化的代码: 然而,该代码并不是为了给出兑换金额的最低硬币数量,但代码似乎给出了所需的最低硬币数量。我想要一个案例,它不能给出所需的最低数量的硬币

def change(amount):
    money = ()
    for coin in [25,10,5,1]:
        num = amount/coin
        money += (coin,) * num
        amount -= coin * num

    return money

print change(59)

output is: 
(25, 25, 5, 1, 1, 1, 1)
print change(-1)
(10, 10, 1, 1, 1, 1)
因为,对于这组可能的硬币,贪婪算法将始终返回最优结果。然而,“[…]如果硬币面额是1、3和4,那么为了得到6,贪婪算法将选择三枚硬币(4,1,1),而最佳解决方案是两枚硬币(3,3)”

因此,您需要更改可能的硬币集,以使用该算法面对非最优解。

因为,对于该可能的硬币集,贪婪算法将始终返回最优结果。然而,“[…]如果硬币面额是1、3和4,那么为了得到6,贪婪算法将选择三枚硬币(4,1,1),而最佳解决方案是两枚硬币(3,3)”


因此,您需要更改一组可能的硬币,以使用该算法面对非最优解决方案。

如前所述,贪婪解决方案适用于该组硬币

适用于所有硬币集的最佳算法示例:

coins = (1, 5, 10, 25)

def change(amount):
    min_coins = [()]
    for i in range(1, amount+1):
        best = min((min_coins[i-x] + (x,) for x in coins if i >= x), key=len)
        min_coins.append(best)
    return min_coins[amount]

print change(59)

如前所述,贪婪的解决方案适用于这组硬币

适用于所有硬币集的最佳算法示例:

coins = (1, 5, 10, 25)

def change(amount):
    min_coins = [()]
    for i in range(1, amount+1):
        best = min((min_coins[i-x] + (x,) for x in coins if i >= x), key=len)
        min_coins.append(best)
    return min_coins[amount]

print change(59)

从字面上理解测试用例的期望结果,负数可能导致它无法给出所需的最小硬币数

def change(amount):
    money = ()
    for coin in [25,10,5,1]:
        num = amount/coin
        money += (coin,) * num
        amount -= coin * num

    return money

print change(59)

output is: 
(25, 25, 5, 1, 1, 1, 1)
print change(-1)
(10, 10, 1, 1, 1, 1)

从字面上理解测试用例的期望结果,负数可能导致它无法给出所需的最小硬币数

def change(amount):
    money = ()
    for coin in [25,10,5,1]:
        num = amount/coin
        money += (coin,) * num
        amount -= coin * num

    return money

print change(59)

output is: 
(25, 25, 5, 1, 1, 1, 1)
print change(-1)
(10, 10, 1, 1, 1, 1)

是什么让你认为它可能不会给出最小数量的硬币?是什么让你认为它可能不会给出最小数量的硬币?因此,问题代码对于当前更换硬币(面额)的情况来说是最佳的?这正是我所期望的。@user1988876,如果是这样,你问了一个没有可能答案的问题。因此,问题代码对于当前更换硬币(面额)的情况是最佳的?这正是我所期望的。@user1988876,如果是这样,你问了一个没有可能答案的问题。在这种情况下,最低需要多少硬币?好问题。借据?我猜答案应该是-1。在这种情况下,最少需要多少硬币?好问题。借据?我想答案应该是-1。