【問題】
現有半美元、四分之一美元、10美分、5美分和1美分共5種硬幣。若將1美元換成零錢,共有多少種不同方式?
【思路】
採用遞迴過程,假定我們所考慮的可用硬幣型別種類排了某種順序,於是就有下面的關係:
將總數為a的現金換成n中硬幣的不同方式的數目等於
注意這裡將換零錢分成兩組時所採用的方式,第一組裡面都沒有使用第一種硬幣,而第二組裡面都使用了第一種硬幣。顯然,換成零錢的全部方式的數目,就等於完全不用第一種硬幣的方式的數目,加上用了第一種硬幣的換零錢方式的數目。而後乙個數目也就等於去掉乙個第一種硬幣值後,剩下的現金數的換零錢方式數目。
這樣就可以將某個給定現金數的換零錢方式的問題,遞迴地歸約為對更少現金數或者更少種類硬幣的同乙個問題。仔細考慮上面的歸約規則,如果採用下面方式處理退化情況,我們就能利用上面規則寫出乙個演算法:
【**實現】
#include #include int denomination(int kinds)
}int countchange(int amount, int kinds)
SICP 換零錢方式的統計問題
在 電腦程式的構造和解釋 第2版 p26頁,作者用遞迴的方式為我們提供了一種解決思路 將總數為a的現金換成n種硬幣的不同方式的數目等於 下面是我將書中scheme的方言換成common lisp實現的 defun first denomination kinds of coins cond kind...
換零錢 見解
n元錢換為零錢,有多少不同的換法?幣值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。例如 5分錢換為零錢,有以下4種換法 1 5個1分 2 1個2分3個1分 3 2個2分1個1分 4 1個5分 由於結果可能會很大,輸出mod 10 9 7的結果 input 輸入1個數n,n...
SICP中關於兌換零錢的練習
記得在sicp的第一章中,第1.2.2小節講樹形遞迴的時候,有乙個例項是換零錢方式的統計。其中,作者是用的樹形遞迴去求解的。但是,在這個例項的最後,作者又以找到乙個效率更高的演算法作為了乙個非正式的作業,留給了讀者作為挑戰。起先在看完這節內容的時候,也是絞盡腦汁都想不出還能有什麼更好的演算法。但是,...