永发信息网

高分!帮忙设计一个Java程序

答案:2  悬赏:40  手机版
解决时间 2021-02-04 00:15
  • 提问者网友:浩歌待明月
  • 2021-02-02 23:26
按照下面的要求编写源文件,能编写其中的某一部分也可以

假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
利息=本金*月息利率*12*存款年限。
现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。

有提示信息或菜单,帮助用户了解求解过程。

算法设计:
为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。
分析题意,设2000元存20年,其中1年存i1次,2年存i2次,3年存i3次,5年存i5次,8年存i8次,则到期时存款人应得到的本利合计为:
2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8
其中rateN为对应存款年限的利率。根据题意还可得到以下限制条件:
0<=i8<=2
0<=i5<=(20-8*i8)/5
0<=i3<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=i1=20-8*i8-5*i5-3*i3-2*i2
可以用穷举法穷举所有的i8、i5、i3、i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。

可以使用图形用户界面,也可以使用字符界面。
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-02-03 00:00
代码如下:(将代码拷贝到 eclipse 中后,全选,按 ctrl+i 即可调整格式。拷贝到jbuilder中后,全选,按 tab 即可调整格式。调整格式后,看起来会比较美观。)
对了,另发现你的公式:
存款人应得到的本利合计为:
2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8

有点儿问题,需要修改为:
2000*(1+rate1*12*i1)*(1+rate2*12*i2)*(1+rate3*12*i3)*(1+rate5*12*i5)*(1+rate8*12*i8)

public class Banker {

public static void main(String[] args) {
Banker banker = new Banker();
banker.caculateMoney();
}

// 具体算法

public void caculateMoney() {

int benJin = 2000;
double[] rates = new double[] {0, 0.0063, 0.0066, 0.0069, 0, 0.0075, 0, 0, 0.0084};
// 0, 1, 2, 3, 4, 5, 6, 7, 8 存款年数对应的月利率
// int N = 20;
double maxValue = 0;
for (int i8 = 0; i8 <= 20 / 8; i8++) {
for (int i5 = 0; i5 <= (20 - 8 * i8) / 5; i5++) {
for (int i3 = 0; i3 <= (20 - 8 * i8 - 5 * i5) / 3; i3++) {
for (int i2 = 0; i2 <= (20 - 8 * i8 - 5 * i5 - 3 * i3) / 2; i2++) {
for (int i1 = 0; i1 <= 20 - 8 * i8 - 5 * i5 - 3 * i3 - 2 * i2; i1++) {

double tmpValue = 2000;
if (i1 > 0) {
tmpValue *= (1 + rates[1]*12* i1) ;
}
if (i2 > 0) {
tmpValue *= (1 + rates[2]*12* i2) ;
}
if ( i3 > 0 ){
tmpValue *= (1 + rates[3]*12*i3) ;
}
if ( i5 > 0 ){
tmpValue *= (1 + rates[5]*12 * i5);
}
if ( i8 > 0 ){
tmpValue *= (1 + rates[8]*12* i8) ;
}

if ( tmpValue > maxValue ){

System.out.println("本次存款方式得到的本息合计:"+tmpValue+" 比上次得到的 "+ maxValue + " 多。");
maxValue = tmpValue;

System.out.print("存款年数输出如下 i8:"+i8);
System.out.print(" ");
System.out.print("i5:"+i5);
System.out.print(" ");
System.out.print("i3:"+i3);
System.out.print(" ");
System.out.print("i2:"+i2);
System.out.print(" ");
System.out.println("i1:"+i1);

}

}
}
}
}
}

System.out.println("计算结束,最后得到的结果即为最好的存款方式。:)");

}
}
全部回答
  • 1楼网友:酒醒三更
  • 2021-02-03 01:00
想设计 可惜没钱可拿
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯