这篇文章讲述的是算法初级部分的算法数学问题_Question2存款问题问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
假设银行存取存款不同期限的月利息为:
0.63% 期限为1年
0.66% 期限为2年
0.69% 期限为3年
0.75% 期限为5年
0.84% 期限为8年
现在已知某人手上有2000元,要求通过计算选择出一种存钱方案,使得这笔钱存入银行20年后获得的利息最多,假定银行对超出存款期限的那部分不付利息。
算法分析
为获取最大利息,应存进银行期满后立即取出然后立即将本金和利息一起存入银行,如此反复操作期满为止。假设这20年中,1年期存了1次,2年期存了2次,3年期存了3次,5年期存了5次,8年期存了8次,则到期时存款人所得本金加利息为:
2000*(1+0.0063)^1*(1+0.0066)^2*(1+0.0069)^3*(1+0.0075)^5*(1+0.0084)^8
由此可知使用穷举法计算出每一种情况的利润再取最大利润即可,确定
每个for循环的取值范围:
y8:0~2
y5:0~(20-y8*8)/5
y3:0~(20-y8*8-y5*5)/3
y2:0~(20-y8*8-y5*5-y3*3)/2
y1=20-y8*8-y5*8-y3*3-y2*2
用max记录每次循环的结果取最大即可
代码实现
package mathematics;
public class Q2_SaveMoney {
/**
* 问题描述:假设银行存取存款不同期限的月利息为:
* 0.63% 期限为1年
* 0.66% 期限为2年
* 0.69% 期限为3年
* 0.75% 期限为5年
* 0.84% 期限为8年
* 现在已知某人手上有2000元,要求通过计算选择出一种存钱方案,使得
* 这笔钱存入银行20年后获得的利息最多,假定银行对超出存款期限的那
* 部分不付利息。
* 算法分析:为获取最大利息,应存进银行期满后立即取出然后立即将本金和利息一
* 起存入银行,如此反复操作期满为止。
* 假设这20年中,1年期存了1次,2年期存了2次,3年期存了3次,5年期
* 存了5次,8年期存了8次,则到期时存款人所得本金加利息为:
* 2000*(1+0.0063)^1*(1+0.0066)^2*(1+0.0069)^3*(1+0.0075)^5
* *(1+0.0084)^8
*
* 由此可知使用穷举法计算出每一种情况的利润再取最大利润即可,确定
* 每个for循环的取值范围:
* y8:0~2
* y5:0~(20-y8*8)/5
* y3:0~(20-y8*8-y5*5)/3
* y2:0~(20-y8*8-y5*5-y3*3)/2
* y1=20-y8*8-y5*8-y3*3-y2*2
* 用max记录每次循环的结果取最大即可
*
*/
public static void main(String[] args) {
int y1 , y2 , y3 , y5 , y8 ; //各个期限的变量
int x1=0 , x2=0 , x3=0 , x5=0 , x8=0 ; //记录次数用于输出
double maxresult =0; //记录结果
double initsal = 2000 ; //存入银行的钱为1000
for(y8=0 ; y8<=2 ;y8++) //8年期
for(y5=0 ; y5<=(20-y8*8)/5 ; y5++) //5年期
for(y3=0 ; y3<=(20-y8*8-y5*5)/3 ; y3++) //3年期
for(y2=0 ; y2<=(20-y8*8-y5*5-y3*3)/2 ; y2++){ //2年期
y1=20-y8*8-y5*5-y3*3-y2*2 ;
double result = initsal * Math.pow((1+0.0063*12), y1)
* Math.pow((1+2*0.0066*12), y2)
* Math.pow((1+3*0.0069*12), y3)
* Math.pow((1+5*0.0075*12), y5)
* Math.pow((1+8*0.0084*12), y8) ;
if(result>maxresult){
x1 = y1 ;
x2 = y2 ;
x3 = y3 ;
x5 = y5 ;
x8 = y8 ;
maxresult = result ;
}
}
System.out.println("1年期"+x1+"次,2年期"+x2+"次,3年期"+x3+"次,5年期"+x5+"次,8年期"+x8+"次,获得本息合计为:"+maxresult);
}
}
样例输出
1年期0次,2年期0次,3年期0次,5年期4次,8年期0次,获得本息合计为:8841.012499999999