银行存款问题(逆推)
母亲为儿子Frank的四年大学学费准备了一笔存款,方式是整存零取,规定Frank每月月底取下一个月的生活费。
现在假设利率为1.71%,编写程序,计算母亲最少需要存多少钱?
可以采用逆推法分析存钱和取钱的过程,因为按照月为周期取钱,所以共四年48个月,并分别对每个月进行计
算。如果在第48个月后sun大学毕业时连本带利要取1000元,这要求出前47个月时银行存款的钱数。
(1)第47月月末存款=1000(1+0.0171/12)
(2)第46月月末存款=(47月月末存款+1000)/(1+0.0171/12)
(3)第45月月末存款=(46月月末存款+1000)/(1+0.0171/12)
(4)第44月月末存款=(45月月末存款+1000)/(1+0.0171/12)
…
(47)第2月月末存款=(第三个月月末存款+1000)/(1+0.0171/12)
(48)第1月月末存款=(第二个月月末存款+1000)/(1+0.0171/12)
逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
public class 银行存款问题 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int FETCH=1000;
double[]num=new double[49];
num[48]=(double)FETCH;
double RATE=0.0171;
for(int i = 47;i>0; i--){
num[i]=(num[i + 1] + FETCH) / (1 + RATE / 12);
}
for (int i =48; i>0; i--) {
System.out.println("第"+i+"月月末存款:"+num[i]+"");
}
}
}