貪心算法——硬幣找零2——python


找零錢問題(難度系數為3

« 問題描述

設有n種不同面值的硬幣,各硬幣的面值存於數組T[1:n]中。現要用這些面值的硬幣來找錢,可以實用的各種面值的硬幣個數不限。當只用硬幣面值T[1],T[2],…,T[i]時,可找出錢數j的最少硬幣個數記為C(i,j)。若只用這些硬幣面值,找不出錢數j時,記C(i,j)=∞。

«編程任務

設計一個動態規划算法,對1≤j≤L,計算出所有的C( n,j )。算法中只允許實用一個長度為L的數組。用L和n作為變量來表示算法的計算時間復雜性

«數據輸入

從屏幕輸入數據。輸入第1行中有1個正整數n(n<=13),表示有n種硬幣可選。接下來的一行是每種硬幣的面值。由用戶輸入待找錢數j。

« 結果輸出

 程序運行結束時,將計算出的所需最少硬幣個數輸出到屏幕。

 

輸入示例

輸出文件示例

3

1 2 5

9

3

 

def get_min_coins(coin_combinations,amount_rem):
    coin_list = []
    
    sorted_coin_combinations = sorted(coin_combinations, reverse = True)   #將面值從大到小排序
    
    for coin_val in sorted_coin_combinations:
        coin_count = int(amount_rem/coin_val)     #計算每個面值的個數(換成零錢時)
        coin_list += [coin_val]*coin_count        #將零錢放入輸出列表
        
        amount_rem -= coin_val * coin_count       #找零之后,剩下的錢
        if amount_rem <= 0:
            break
    if amount_rem != 0:
        print("無法找零!")
    else:
        return coin_list
        


if __name__ == "__main__":
    n = (int)(input("請輸入面值個數:"))
    coin_combinations = []
    for i in range(n):
        coin_combinations.append((int)(input("面值:")))
    money = (int)(input("需要找的零錢:"))
    print(get_min_coins(coin_combinations,money))

 

 

 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM