欢迎光临散文网 会员登陆 & 注册

Python编程算法【十四】 存钱

2022-10-04 13:30 作者:SPC编程爱好者  | 我要投稿

【案例内容】

假设银行整存整取存款的不同期限月利率为:
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次,那么最终的本金和利息就是:
2000%20*%20(1%20%2B%200.0075%20*%2012%20*%205)%5E3%20
注意题目里是月利率,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代码】

利用列表可快速求得最大值
5年连存4年的收益最大

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

Python编程算法【十四】 存钱的评论 (共 条)

分享到微博请遵守国家法律