一、问题描述
假设银行整存整取存款不同期限的月息利率为:
0.63% 期限为1年
0.66% 期限为2年
0.69% 期限为3年
0.75% 期限为5年
0.84% 期限为8年
现在已知某人手上有2000元要求通过计算选择出一种存钱方案,使得这笔钱存入银行20年后获得的利息最多,假设银行对超出存款期限的那部分时间不算利息,
二、设计思路
设这20年中1年期限存了x1次,2年期限存了x2次,3年期限存了x3次,5年期限存了x5次,
8年期限存了x8次,得到的本金和利息为:
2000*(1+0.063)x1*(1+0,066)x2*(1+0.069)x3*(1+0.075)x5*(1+0.084)x8
条件限制为
0<=x8<=2
0<=x5<=(20-8*x8)/5
0<=x3<=(20-8*x8-5*x5)/3
0<=x2<=(20-8*x8-5*x5-3*x3)/2
x1=20-8*x8-5*x5-3*x3-2*x2 x1>=0
三、流程图
四、伪代码
头文件
0.63% 期限为1年
0.66% 期限为2年
0.69% 期限为3年
0.75% 期限为5年
0.84% 期限为8年
算出结果,列出所有的可能的组合比较大小
输出最优结果
五、代码实现
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x1,x2,x3,x5,x8,y1,y2,y3,y5,y8;
double sum,max=0.0;
for(x8=0;x8<=2;x8++)
{
for(x5=0;x5<=(20-8*x8)/5;x5++)
{
for(x3=0;x3<=(20-8*x8-5*x5)/3;x3++)
{
for(x2=0;x2<=(20-8*x8-5*x5-3*x3)/2;x2++)
{
x1=20-8*x8-5*x5-3*x3-2*x2;
sum=2000*pow((1+0.0063*12),x1)
*pow((1+2*0.0066*12),x2)
*pow((1+3*0.0069*12),x3)
*pow((1+5*0.0075*12),x5)
*pow((1+8*0.0084*12),x8);
if(sum>max)
{
max=sum;
y1=x1;
y2=x2;
y3=x3;
y5=x5;
y8=x8;
}
}
}
}
}
cout<<"期限为1年存了"<<y1<<"年"<<endl;
cout<<"期限为2年存了"<<y2<<"年"<<endl;
cout<<"期限为3年存了"<<y3<<"年"<<endl;
cout<<"期限为5年存了"<<y5<<"年"<<endl;
cout<<"期限为8年存了"<<y8<<"年"<<endl;
cout<<"最终获得的本利合计"<<sum;
}
六,补充
pow函数的使用
函数原型double pow(double x,double y)
计算xy的值
为数学函数头文件加上#include<math.h>
标签:x1,期限,问题,x8,x2,x3,存钱,x5 From: https://www.cnblogs.com/duzhangdan/p/17349287.html