存钱问题
【问题描述】
父亲准备为小龙的四年大学生活一次性储蓄一笔钱,使用整存零取的方式,控制小龙每月月初取1000元准备这个月使用。假设银行整存零取的年息为1.71%,请算出父亲至少需要存入多少钱才行。
【问题分析】
这个问题是一个典型的递推问题,分析存钱和取钱的过程,我们可以采用逆推的方法。4年48个月,每月取1000元,最后一个月正好取完。我们可以采用一个数组存放每个月剩余的钱数,那么最后一个月连本带息为1000,即第48个月数组里的值为1000。
第47个月的存折里钱为:取走的1000元生活费+下个月1000月的本金,即:
1000+第48个月的钱数/(1+0.00171/12)
依次类推可以求出第46、45、……、第1个月的钱数:
第46个月的存折里钱为:1000+第47个月的钱数/(1+0.00171/12)
第45个月的存折里钱为:1000+第46个月的钱数/(1+0.00171/12)
……
第1个月的存折里钱为:1000+第2个月的钱数/(1+0.00171/12)
通过以上的递推就可以求出最初存款的钱数。
【程序代码】
1 public class CQWT 2 { 3 public static final double MONEYRATE=0.0171; //存款利率 4 public static void main(String[] args) 5 { 6 //定义一个长度为48的数组,用来装每个月月初还剩下的存款 7 double money[]=new double[48]; 8 9 //最后一个月月初1000元 10 money[47]=1000; 11 System.out.printf("48月初的剩余存款数为:%.2f\n",money[47]); 12 //通过循环逆推出前一个月的剩余存款 13 for(int i=47;i>0;i--) 14 { 15 money[i-1]=1000+money[i]/(1+MONEYRATE/12); 16 System.out.printf("%d月初的剩余存款数为:%.2f\n",i,money[i-1]); 17 } 18 //算出最初要存入的钱,即第一个剩余存款数 19 System.out.printf("\n最初要存入%.2f元。",money[0]); 20 } 21 }
【运行结果】