Python編程算法【十四】 存錢
【案例內(nèi)容】
假設(shè)銀行整存整取存款的不同期限月利率為:
0.63%,期限為1年;????????0.66%,期限為2年;
0.69%,期限為3年;????????0.75%,期限為5年;
0.84%,期限為8年;
現(xiàn)預(yù)存2000元,要求通過程序算法計算出一種存錢方案,使得這筆錢存入20年后獲得的利息最多。假定銀行對超出存款期限的那部分時間不付利息。
【解題思路】
要獲取到最多利息,就是將錢存入銀行一定年限到期后,馬上取出來,然后將本金及利息一起,作為新的本金繼續(xù)存入銀行中,如此反復(fù)操作達(dá)20年后,此時本金加利息最多。
那么,根據(jù)題意,首先要在20年里,找出所有存款方式的排列組合。轉(zhuǎn)換成數(shù)學(xué)問題:
也就是1年、2年、3年、5年、8年分別存幾次,最終相加后,得數(shù)等于20.
然后,根據(jù)月利率計算最終所得的本金及利息。
假設(shè),期限5年,存了3次,那么最終的本金和利息就是:,
注意題目里是月利率,1年有12個月,5年就利率就是 0.0075 * 12 * 5,其他年限類推。
接著分析,8年能存的次數(shù) (設(shè)變量 eight),只能是:0、1、2 次 (3次就超過了)。
那么,5年能存的次數(shù)?(設(shè)變量?five),就是:0 ~ (20 // 5 - eight) 次 (// 表示整除)。即:
如果,8年存0次,那么5年可存0 ~ 4次;
如果,8年存1次,那么5年可存0 ~ 2次;
如果,8年存2次,那么5年可存0 ~ 0次;(即0次)
以此類推,3年能存的次數(shù)?(設(shè)變量 three),就是:0 ~ (20 // 3 - eight - five) 次。
2年能存的次數(shù)?(設(shè)變量 two),就是:0 ~ (20 // 2 -?eight - five - three) 次。
1年能存的次數(shù)?(設(shè)變量 one),就是:0 ~ (20 -?eight - five?- three - two) 次。
最后的本金加利息?(設(shè)變量 money)就是:
money = 2000 * (1 + 0.0063 * 12) ** one * (1 + 0.0066 * 12 * 2) ** two * (1 + 0.0069 * 12 * 3) ** three * (1 + 0.0075 * 12 * 5) ** five * (1 + 0.0084 * 12 * 8) ** eight
【注:** 是指乘方】
最后,將所有方案及最終的本金利息,分別存入兩個列表中,找出本金利息的最大值及其索引,即可在所有方案的列表中,找到存款方案。
【Python代碼】


小結(jié):從本題中可以看出,20年的存款方案可以有124種之多,不同的存款方案之間,最終的收益差距可達(dá)近400元,如果一開始存入的是10000元,則最終的差距會變5倍,如果是20000元,竟可達(dá)10倍之多。可見小存款,卻藏著大學(xué)問。若沒程序相助,估計很難找出最佳方案。