Python编程算法【十四】 存钱
【案例内容】
假设银行整存整取存款的不同期限月利率为:
0.63%,期限为1年; 0.66%,期限为2年;
0.69%,期限为3年; 0.75%,期限为5年;
0.84%,期限为8年;
现预存2000元,要求通过程序算法计算出一种存钱方案,使得这笔钱存入20年后获得的利息最多。假定银行对超出存款期限的那部分时间不付利息。
【解题思路】
要获取到最多利息,就是将钱存入银行一定年限到期后,马上取出来,然后将本金及利息一起,作为新的本金继续存入银行中,如此反复操作达20年后,此时本金加利息最多。
那么,根据题意,首先要在20年里,找出所有存款方式的排列组合。转换成数学问题:
也就是1年、2年、3年、5年、8年分别存几次,最终相加后,得数等于20.
然后,根据月利率计算最终所得的本金及利息。
假设,期限5年,存了3次,那么最终的本金和利息就是:,
注意题目里是月利率,1年有12个月,5年就利率就是 0.0075 * 12 * 5,其他年限类推。
接着分析,8年能存的次数 (设变量 eight),只能是:0、1、2 次 (3次就超过了)。
那么,5年能存的次数 (设变量 five),就是:0 ~ (20 // 5 - eight) 次 (// 表示整除)。即:
如果,8年存0次,那么5年可存0 ~ 4次;
如果,8年存1次,那么5年可存0 ~ 2次;
如果,8年存2次,那么5年可存0 ~ 0次;(即0次)
以此类推,3年能存的次数 (设变量 three),就是:0 ~ (20 // 3 - eight - five) 次。
2年能存的次数 (设变量 two),就是:0 ~ (20 // 2 - eight - five - three) 次。
1年能存的次数 (设变量 one),就是:0 ~ (20 - eight - five - three - two) 次。
最后的本金加利息 (设变量 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代码】


小结:从本题中可以看出,20年的存款方案可以有124种之多,不同的存款方案之间,最终的收益差距可达近400元,如果一开始存入的是10000元,则最终的差距会变5倍,如果是20000元,竟可达10倍之多。可见小存款,却藏着大学问。若没程序相助,估计很难找出最佳方案。