目录
C++银行存钱
一、题目要求
1、编程实现
2、输入输出
二、算法分析
三、程序编写
四、程序说明
五、运行结果
六、考点分析
七、推荐资料
C++银行存钱
一、题目要求
1、编程实现
小明的父亲准备为小明的4年大学生活一次性在银行储蓄一笔钱,使用整存零取的方式,控制小明每月的月底只能提取1000元准备下月使用。假设银行一年整存零取的年利息为1.68%,请编程计算出父亲至少需要一次性存入多少钱才够小明4年大学生活(4年的利息也应计算在内)
(注:年利息1.68%,转换成月利率为:0.0168/12)
2、输入输出
输出描述:输出每个月月末对应的存款
输出样例:
第48个月月末应存入的钱数:1000
第47个月月末应存入的钱数:1997.2
第46个月月末应存入的钱数:2993.01
第45个月月末应存入的钱数:3987.43
第44个月月末应存入的钱数:4980.46
第43个月月末应存入的钱数:5972.1
第42个月月末应存入的钱数:6962.35
第41个月月末应存入的钱数:7951.22
第40个月月末应存入的钱数:8938.7
第39个月月末应存入的钱数:9924.81
第38个月月末应存入的钱数:10909.5
第37个月月末应存入的钱数:11892.9
第36个月月末应存入的钱数:12874.9
第35个月月末应存入的钱数:13855.5
第34个月月末应存入的钱数:14834.7
第33个月月末应存入的钱数:15812.6
第32个月月末应存入的钱数:16789.1
第31个月月末应存入的钱数:17764.2
第30个月月末应存入的钱数:18738
第29个月月末应存入的钱数:19710.4
第28个月月末应存入的钱数:20681.4
第27个月月末应存入的钱数:21651.1
第26个月月末应存入的钱数:22619.4
第25个月月末应存入的钱数:23586.4
第24个月月末应存入的钱数:24552
第23个月月末应存入的钱数:25516.3
第22个月月末应存入的钱数:26479.2
第21个月月末应存入的钱数:27440.8
第20个月月末应存入的钱数:28401.1
第19个月月末应存入的钱数:29360
第18个月月末应存入的钱数:30317.5
第17个月月末应存入的钱数:31273.7
第16个月月末应存入的钱数:32228.6
第15个月月末应存入的钱数:33182.2
第14个月月末应存入的钱数:34134.4
第13个月月末应存入的钱数:35085.2
第12个月月末应存入的钱数:36034.8
第11个月月末应存入的钱数:36983
第10个月月末应存入的钱数:37929.9
第9个月月末应存入的钱数:38875.5
第8个月月末应存入的钱数:39819.7
第7个月月末应存入的钱数:40762.7
第6个月月末应存入的钱数:41704.3
第5个月月末应存入的钱数:42644.6
第4个月月末应存入的钱数:43583.6
第3个月月末应存入的钱数:44521.2
第2个月月末应存入的钱数:45457.6
第1个月月末应存入的钱数:46392.7
二、算法分析
- 分析存钱和取钱的过程,可以采用逆推的方法来分析
- 因为是每月月底取钱,所以要保证4年都能每月取1000
- 4年就是48个月,每个月分别进行计算如下:
- 最后一个月也就是第48个月应该是1000元
- 第47个月月末就应该还需要有存款:1000(1+0.0168/12)
- 第46个月月末就应该还需要有存款:(第47个月末存款+1000)(1+0.0168/12)
- 第45个月月末就应该还需要有存款:(第46个月末存款+1000)(1+0.0168/12)
- ......
- 第1个月月末就应该还需要有存款:(第2个月末存款+1000)(1+0.0168/12)
- 所以通过上述的逆推过程就可以得出对应的最初需要存储多少钱
三、程序编写
#include<bits/stdc++.h>
using namespace std;
float month[49];
int main()
{float rate = 0.0168;month[48] = 1000.0;for(int i=47;i>0;i--){month[i] = (month[i+1] + 1000) / (1 + rate/12);}for(int i=48;i>0;i--){cout << "第" << i << "个月月末应存入的钱数:" << month[i] << endl; }return 0;
}
四、程序说明
- 首先,定义了一个数组month,用来存储每个月月末的钱数
- 数组的大小为49,其中月末钱数从month[1]到month[48]
- 接下来,定义了一个变量rate,表示年利率,初始值为0.0168
- 然后,将数组month[48]的初始值设为1000.0,表示第48个月初始时有1000元钱
- 接下来的两个循环分别计算每个月月末应存入的钱数。 第一个循环从i=47开始倒序遍历数组,计算month[i]的值
- month[i]的值等于month[i+1]和1000的和除以(1+rate/12)。表示当前月末的钱数等于下个月月末的钱数加上每个月存入的1000元,然后除以(1+rate/12)得到的值
- 第二个循环从i=48开始倒序遍历数组,将计算得到的每个月月末的钱数输出
- 最后返回0,程序结束
本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102
五、运行结果
第48个月月末应存入的钱数:1000
第47个月月末应存入的钱数:1997.2
第46个月月末应存入的钱数:2993.01
第45个月月末应存入的钱数:3987.43
第44个月月末应存入的钱数:4980.46
第43个月月末应存入的钱数:5972.1
第42个月月末应存入的钱数:6962.35
第41个月月末应存入的钱数:7951.22
第40个月月末应存入的钱数:8938.7
第39个月月末应存入的钱数:9924.81
第38个月月末应存入的钱数:10909.5
第37个月月末应存入的钱数:11892.9
第36个月月末应存入的钱数:12874.9
第35个月月末应存入的钱数:13855.5
第34个月月末应存入的钱数:14834.7
第33个月月末应存入的钱数:15812.6
第32个月月末应存入的钱数:16789.1
第31个月月末应存入的钱数:17764.2
第30个月月末应存入的钱数:18738
第29个月月末应存入的钱数:19710.4
第28个月月末应存入的钱数:20681.4
第27个月月末应存入的钱数:21651.1
第26个月月末应存入的钱数:22619.4
第25个月月末应存入的钱数:23586.4
第24个月月末应存入的钱数:24552
第23个月月末应存入的钱数:25516.3
第22个月月末应存入的钱数:26479.2
第21个月月末应存入的钱数:27440.8
第20个月月末应存入的钱数:28401.1
第19个月月末应存入的钱数:29360
第18个月月末应存入的钱数:30317.5
第17个月月末应存入的钱数:31273.7
第16个月月末应存入的钱数:32228.6
第15个月月末应存入的钱数:33182.2
第14个月月末应存入的钱数:34134.4
第13个月月末应存入的钱数:35085.2
第12个月月末应存入的钱数:36034.8
第11个月月末应存入的钱数:36983
第10个月月末应存入的钱数:37929.9
第9个月月末应存入的钱数:38875.5
第8个月月末应存入的钱数:39819.7
第7个月月末应存入的钱数:40762.7
第6个月月末应存入的钱数:41704.3
第5个月月末应存入的钱数:42644.6
第4个月月末应存入的钱数:43583.6
第3个月月末应存入的钱数:44521.2
第2个月月末应存入的钱数:45457.6
第1个月月末应存入的钱数:46392.7
六、考点分析
难度级别:一般,这题相对而言有一点难度,在于逆向思维,具体主要考查如下:
- 分析题目,找到解题思路
- 学会逆向思维的算法思维,学会逆推方法的使用
- 学会输入流对象cin的使用,从键盘读入相应的数据
- 学会for循环的使用,在确定循环次数的时候推荐使用学会
- 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 学会分析题目,逆推算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!
七、推荐资料
- 所有考级比赛学习相关资料合集【推荐收藏】