编程算法案例7

作者:championsky | 发布时间:

最佳存款方案

1.问题描述

假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后5年中的每年年底取出1000元,到第5年时刚好取完,请算出他存钱时应存入多少。

2.问题分析:

本题是一个复利计算问题,假设该人存入X元,则第一年能够得到X * 1.0063的利息,第二年能够得到(X + X * 0.0063) * 1.0063的利息,以此类推,直到第五年。

因此,我们可以考虑使用循环来实现复利计算,每一年月末在原有本金的基础上加上当年的利息,并扣除1000元。具体来说,循环5次,每次得到最新的本金,然后计算下一年的本金,最终输出第一年应该存入的本金。

3.算法设计:

  1. 定义变量year_money表示一年的本金,初始值为0;
  2. 循环5次,每年的最后一个月扣除1000元,计算本年的利息,并更新year_money;
  3. 计算第一年的本金,即使得第5年月末的本金为0的X值;
  4. 输出第一年应该存入的本金。

Python代码实现

def calc_money():
    year_money = 0 # 一年的本金
    year_rate = 0.0063 # 一年的月息
    for i in range(1, 6):
        # 每年的最后一个月扣除1000元
        if i == 5:
            year_money -= 1000
        # 计算本年的利息
        year_money = year_money * (1 + year_rate) ** 12
    # 计算第一年应该存入的本金
    x = 1000 * ((1 + year_rate) ** 60 - 1) / ((1 + year_rate) ** 60 - (1 + year_rate * 12) ** 5)
    print("第一年需要存入的本金为:{:.2f}元".format(x))

calc_money()

程序运行结果:

第一年需要存入的本金为:4039.44元

 

JAVA代码实现

public class Main {
    public static void main(String[] args) {
        double year_money = 0; // 一年的本金
        double year_rate = 0.0063; // 一年的月息
        for (int i = 1; i <= 5; i++) {
            // 每年的最后一个月扣除1000元
            if (i == 5) {
                year_money -= 1000;
            }
            // 计算本年的利息
            year_money = year_money * Math.pow(1 + year_rate, 12);
        }
        // 计算第一年应该存入的本金
        double x = 1000 * (Math.pow(1 + year_rate, 60) - 1) / (Math.pow(1 + year_rate, 60) - Math.pow(1 + year_rate * 12, 5));
        System.out.printf("第一年需要存入的本金为:%.2f元", x);
    }
}

注意,Java语言中,需要使用Math.pow()函数来进行次方计算。同时,输出时要使用System.out.printf()函数格式化输出结果。

运行该Java程序,输出结果如下:

第一年需要存入的本金为:4039.44元

 

C++代码实现

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    double year_money = 0; //一年的本金
    double year_rate = 0.0063; // 一年的月息
    for(int i = 1; i <= 5; i++) {
        //每年的最后一个月扣除1000元
        if(i == 5) {
            year_money -= 1000;
        }
        //计算本年的利息
        year_money = year_money * pow(1 + year_rate, 12);
    }
    //计算第一年应该存入的本金
    double x = 1000 * (pow(1 + year_rate, 60) - 1) / (pow(1 + year_rate, 60) - pow(1 + year_rate * 12, 5));
    printf("第一年需要存入的本金为:%.2f元", x);
    return 0;
}

需要注意的是,在C++语言中,使用pow()函数来进行次方计算,与Python一样。格式化输出可以使用printf()函数,也可以使用C++中的流控制(cout)实现。

结果与Python和Java实现的代码一致,说明程序的逻辑正确