1.问题描述
假设银行整存整取存款不同期限的月利率为:
·0.63%,期限为1年;
·0.66%,期限为2年;
·0.69%,期限为3年;
·0.75%,期限为5年;
·0.84%,期限为8年。
现在已知某人手上有2000元,要求通过计算选择出一种存钱方案,使得
这笔钱存入银行20年后获得的利息最多。假定银行对超出存款期限的那部分
时间不付利息。
2.问题分析
为了获取到最多的利息,应该在存入银行的钱到期后马上就取出来,然
后再立刻将原来的本金加上当前所获取到的利息作为新的本金存入银行中,
这样反复操作直到满20年为止。
又由于存款的期限不同,对应的利率是不相同的,因此在20年中,不同
的存取期限的组合所获得的利息也是不相同的。
假设在这20年中,1年期限的存了x1次,2年期限的存了x2次,3年期限的
存了x3次,5年期限的存了x5次,8年期限的存了x8次,则到期时存款人所得
的本利合计为:
2000×(1+0.063) x1 ×(1+0.066) x2 ×(1+0.069) x3 ×(1+0.075) x5 ×(1+0.084) x8 ①
由题意可知,显然8年期限的存款次数最多为两次,因此可得到下面对存
款期限的限定条件:
0≤x8≤2
0≤x5≤(20-8×x8)/5
0≤x3≤(20-8×x8-5×x5)/3
0≤x2≤(20-8×x8-5×x5-3×x3)/2
x1=20-8×x8-5×x5-3×x3-2×x2且x1≥0
3.算法设计
根据式①及对存款期限的限定条件,可以使用for循环来穷举出所有可能
的存款金额,从中找出最大的存款金额就是该问题的解。
因为限定条件已经确定了,因此for循环的循环次数也就确定了。
4.确定程序框架
程序流程图如图所示。

5.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 存钱问题
if __name__=="__main__":#在20年中,1年期限的存了x1次,2年期限的存了x2次,以此类推max = 0.0for x8 in range(0,3):t5 = (20-8*x8)//5 #存款5年的最大次数for x5 in range(0, t5+1):t3 = (20-8*x8-5*x5)//3 #存款3年的最大次数for x3 in range(0, t3+1):t2 = (20-8*x8-5*x5-3*x3)//2for x2 in range(0, t2+1):x1 = 20-8*x8-5*x5-3*x3-2*x2 # 存款期限限定条件# 判断条件result = 2000* ((1+0.0063*12)**x1) * ((1+2*0.0066*12)**x2)* ((1+3*0.0069*12)**x3) * ((1+5*0.0075*12)**x5) * ((1+8*0.0084*12)**x8)# y1、y2、y3、y5、y8用于记录获利最多的存款方式if result > max:max = resulty1 = x1y2 = x2y3 = x3y5 = x5y8 = x8# 输出结果print("获得利息最多的存款方式为:");print("8年期限的存了%d次" %y8);print("5年期限的存了%d次" %y5);print("3年期限的存了%d次" %y3);print("2年期限的存了%d次" %y2);print("1年期限的存了%d次" %y1);print("存款人最终的获得的本利合计:%0.2f" %result);

程序说明:
1)“**”表示幂运算,x**y返回x的y次幂,即计算x y 的值。例如,
5**2=25。
2)使用括号“()”改变程序的优先级。Python语言中,括号“()”拥有最高优
先级,可以强制表达式按照需要的顺序求值,括号中的表达式会优先执行,
也可以利用括号使得表达式更加易读。
6.运行结果
在PyCharm下运行程序,结果如图2.10所示。从输出结果中可知,获利最
多的存款方式为连续存4次5年期的存款,则满20年所得到的本金一共为
8763.19元。注意在程序中控制了输出结果的小数位数为两位。

100个python算法超详细讲解:存钱相关推荐

  1. 100个python算法超详细讲解:搬山游戏

    [100个python算法超详细讲解]@谷歌学术 1.问题描述 设有n座山,计算机与人作为比赛的双方,轮流搬山.规定每次搬 山数不能超过k座,谁搬最后一座谁输.游戏开始时,计算机请人输入 山的总数n和 ...

  2. 100个python算法超详细讲解:平分7筐鱼

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 2.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时, 他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们 ...

  3. 100个python算法超详细讲解:邮票组合

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小 面值邮票中的一张或几张的组合,可以满足不同邮件的不同邮资.现 在,邮局有4种不 ...

  4. 100个python算法超详细讲解:递归解决年龄问题

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问 第4个人多少岁,他说比第3个人大2岁.问第3人多少岁,他说比第2个 人大2 ...

  5. 100个python算法超详细讲解:谁是窃贼

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃 贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎. 下面是这4个人给警察 ...

  6. 100个python算法超详细讲解:抢30游戏

    [100个python算法超详细讲解]@谷歌学术 1.问题描述 由两个人玩"抢30"游戏,游戏规则是:第一个人先说"1"或"1,2",第 二 ...

  7. 100个python算法超详细讲解:卡布列克常数

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 对于任意一个4位数n,进行如下的运算: 1)将组成该4位数的4个数字由大到小排列,形成由这4个数字构 成的最大的4位数. 2)将组成该4 ...

  8. 100个python算法超详细讲解:孪生素数

    [100个python算法超详细讲解@谷哥技术] 1.问题描述 本节要研究孪生素数的问题,先来看看什么是孪生素数. 所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离已经 近得不能再近了,如 ...

  9. 100个python算法超详细讲解:狼追兔子

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 一只兔子躲进了10个环形分布的洞中的某一个.狼在第一个洞中 没有找到兔子,就隔一个洞,到第三个洞中去找:如果没有找到,就 隔两个洞,到第 ...

  10. 100个python算法超详细讲解:猴子吃桃

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 一个猴子摘了一些桃子,它第一天吃掉了其中的一半然后再多吃了 一个,第二天照此方法又吃掉了剩下桃子的一半加一个,以后每天如 此,直到第十天 ...

最新文章

  1. 蜜罐中利用jsonp跨域漏洞和xss漏洞的分析
  2. ASP.NET Button控件的UseSubmitBehavior属性引发的血案
  3. Elasticsearch-搜索并获取数据
  4. OJ1075: 聚餐人数统计(C语言)
  5. 专研自动驾驶,深动科技春季招聘启动,含社招和实习
  6. 微软开源模糊测试平台 OneFuzz
  7. python 的基础 学习 第六天 基础数据类型的操作方法 字典
  8. 企业Linux安全机制遭遇信任危机 SELinux成骇客帮凶?
  9. 正向运动学和反向运动学
  10. relu函数_【AI初识境】激活函数:从人工设计(sigmoid,relu)到自动搜索(swish)
  11. JumpList中Recent类别和自定义类型
  12. Captura录屏软件使用说明
  13. 摄像机没有连接到计算机代码45,摄像头错误代码的解决办法
  14. 论文推荐到计算机科学期刊,计算机类论文参考文献推荐 计算机类核心期刊参考文献哪里找...
  15. 十五章、KPI(千峰网络安全300课时笔记)
  16. 歌咏比赛java代码_JavaEE基础知识
  17. 关于IDEA不生成out文件无法执行程序的问题
  18. ssm+java企业公司产品分销商管理系统
  19. 巧用 即刻搜索事件 input propertychange 监听输入框字数
  20. java读写Excel工具类

热门文章

  1. 田亮晒森碟与海豚亲吻照 父女开心超有爱
  2. sled11 sp2 opensuse zypper usage fr net
  3. 如何制作自己的系统镜像以及备份管理
  4. UI优化策略-Shader篇
  5. vue国际化(不刷新页面)
  6. Java8 官方jvm 标准参考 -XX 配置参数详细信息
  7. java算时差,java计算时间差及比较时间
  8. SpringBoot整合Mybatis(配置文件)
  9. Java实现多条相同数据合并为一条数据
  10. 一文搞定pandas的数据合并