所以这是一个涉及硬币的两部分问题。第一部分涉及将 1-99 美分的硬币数量相加(例如,需要 1 个硬币才能达到 1 美分,2 枚硬币才能达到 2 美分,等等,然后将达到 2 美分所需的硬币总数相加)每个值)。这可以用以下代码表示(随时提出建议/改进):
def findbest(origarray, denom):
current = origarray
i = 1
while(i < size):
if(i in denom):
current[i] = 1
coinlist[i] = [i]
else:
k = 1
while(k < 1 + (i/2)):
c = current[k] + current[i-k]
if(c < current[i]):
current[i] = c
coinlist[i] = coinlist[k] + coinlist[i-k]
k+=1
print i, current[i], coinlist[i]
i+=1
return current
size = 100
coinlist = [[]]
origarray = [0]
i = 1
while(i < size):
origarray.append(100)
coinlist.append([])
i += 1
denom = [1,5,10,25,50]
x = findbest(origarray, denom)
total=0
for value in findbest(origarray,denom):
total += value
print total
print "\n\n\n"
print x
问题的第二部分是找到理想的三种面额(不必是真实面额,但必须是 1),这将产生所有硬币计数的最低总数。这对我来说很棘手。我知道我必须写一些东西来强制面额值,直到找到最佳的三个(我知道是 [1,12,19],我只是无法达到那个点),但我不是确定如何去做。有谁知道如何做到这一点?