Python 为什么代码给了我错误的数量输出?(变革问题)
我试图解决换硬币的问题,在这个问题中,我们必须找到累计到一定数量的硬币的最小数量 以下是我提出的解决方案:Python 为什么代码给了我错误的数量输出?(变革问题),python,dynamic-programming,Python,Dynamic Programming,我试图解决换硬币的问题,在这个问题中,我们必须找到累计到一定数量的硬币的最小数量 以下是我提出的解决方案: import sys denomination = [1,6,10] amount = 12 def coin_change(amount,denomination): coins = 0 ans = [0]*(amount+1) temp = sys.maxsize for i in range(len(ans)): for j in r
import sys
denomination = [1,6,10]
amount = 12
def coin_change(amount,denomination):
coins = 0
ans = [0]*(amount+1)
temp = sys.maxsize
for i in range(len(ans)):
for j in range(len(denomination)):
if denomination[j] <= i:
ans[i] = min(temp, ans[i-denomination[j]]) + 1
return ans
print(coin_change(amount,denomination))
为什么输出中的最后一个数字是3表示数量12?我已经检查了很多次代码,但我仍然不明白为什么会发生这种情况。对于数量6,它给出1,因此对于数量12,它应该给出2,而不是3
我的代码有什么问题?问题是
min(temp,…)
是一个无用的调用,因为您从不减少temp
的值。这个表达式总是返回第二个参数。显然,你真的需要比较备选方案并选择最佳方案,所以这是错误的
这就是你得到3分的原因。最后尝试的面额是10(当j
为2时)。在那次尝试之前,ans[12]
实际上是2,但是它被3(10+1+1)覆盖了
下面是一个更正:
import sys
denomination = [1,6,10]
amount = 12
def coin_change(amount,denomination):
ans = [sys.maxsize]*(amount+1) # initialise with maximum value
for i in range(len(ans)):
for j in range(len(denomination)):
if denomination[j] <= i:
if denomination[j] == i:
ans[i] = 1 # base case
else: # see if we can improve what we have
ans[i] = min(ans[i], ans[i-denomination[j]] + 1)
return ans
print(coin_change(amount,denomination))
导入系统
面额=[1,6,10]
金额=12
def硬币兑换(金额、面额):
ans=[sys.maxsize]*(金额+1)#使用最大值初始化
对于范围内的i(len(ans)):
对于范围内的j(len(面额)):
if面额[j]
import sys
denomination = [1,6,10]
amount = 12
def coin_change(amount,denomination):
ans = [sys.maxsize]*(amount+1) # initialise with maximum value
for i in range(len(ans)):
for j in range(len(denomination)):
if denomination[j] <= i:
if denomination[j] == i:
ans[i] = 1 # base case
else: # see if we can improve what we have
ans[i] = min(ans[i], ans[i-denomination[j]] + 1)
return ans
print(coin_change(amount,denomination))