日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 最小硬币数_Python之动态规划(最少硬币数找零)

發布時間:2024/1/23 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 最小硬币数_Python之动态规划(最少硬币数找零) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

完整代碼:

# 動態規劃最少硬幣數找零

def dpMakeChange(coinValueList, change, minCoins, coinsUsed):

for cents in range(change + 1):#依次循環從0到所需兌換面值的每一個面值

coinCount = cents #初始化最優解為當前面值數

newCoin = 1 #初始化找零硬幣面值列表中的面值

for j in [c for c in coinValueList if c <= cents]:#在不大于要找零的硬幣面值列表中循環

# 注:minCoins[cents - j] + 1 = cents - j的最優解 + 1(1是j的最優解,因為j為一個硬幣) = cents的最優解 - j的最優解 + j的最優解 = cents的最優解,所以下一行代碼的意思就是:若當前面值的最優解比上一循環(或初始)當前面值的最優解更小,則

if minCoins[cents - j] + 1 < coinCount:

coinCount = minCoins[cents - j] + 1 #臨時保存當前面值的最優解

# 將當前硬幣面值j臨時保存為當前找零面值在找零硬幣面值列表中的對應值

newCoin = j

minCoins[cents] = coinCount #記錄當前找零面值在找零最優解列表中的最優解

coinsUsed[cents] = newCoin#記錄當前找零面值在找零硬幣面值列表中對應的值

return minCoins[change]#返回待找零數值的最優解

# 獲取最終找零的硬幣面值

def printCoins(coinsUsed, change):

while change > 0:

thisCoin = coinsUsed[change]#從找零硬幣面值列表中獲取對應的硬幣面值

print(thisCoin, end = '、')

change = change - thisCoin #去除該面值后繼續循環獲取

def main():

amnt = 63 #待找零面值

clist = [1, 5, 10, 21, 25]#有效硬幣面值列表,有序無序都可以

coinsUsed = [0] * (amnt + 1)#初始化找零硬幣面值列表

coinCount = [0] * (amnt + 1)#初始化包含所有找零最優解的列表

zhao = dpMakeChange(clist, amnt, coinCount, coinsUsed)#獲取找零硬幣最少個數

resu = "找零" + str(amnt) + "美分需要" + str(zhao) + "個硬幣。"

print(resu)

print("它們是:")

printCoins(coinsUsed, amnt)#獲取最終找零的硬幣面值

print("\n使用列表如下:")

print(coinsUsed)#找零硬幣面值列表

print("所有數值最優解列表如下:")

print(coinCount)#包含從0到所需兌換面值的每一個面值對應的最優解

main()

結果為:

找零63美分需要3個硬幣。

它們是:

21、21、21、

使用列表如下:

[1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 21, 1, 1, 1, 25, 1, 1, 1, 1, 5, 10, 1, 1, 1, 10, 1, 1, 1, 1, 5, 10, 21, 1, 1, 10, 21, 1, 1, 1, 25, 1, 10, 1, 1, 5, 10, 1, 1, 1, 10, 1, 10, 21]

所有數值最優解列表如下:

[0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 3, 2, 3, 4, 3, 2, 3, 4, 5, 2, 3, 3, 4, 5, 3, 3, 4, 5, 6, 3, 4, 4, 3]

總結

以上是生活随笔為你收集整理的python 最小硬币数_Python之动态规划(最少硬币数找零)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。