需要一个在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。