存钱问题

一、问题描述

假设银行整存整取存款不同期限的月利息为:

0.63% 期限为1年

0.66% 期限为2年

0.69% 期限为3年

0.75% 期限为5年

0.84% 期限为8年

二、设计思路

1、定义x1,x2,x3,x5,x8,y1,y2,y3,y5,y8分别为存款的期限和存款次数。定义max=0.0.

2、利用for循环穷举所有可能的存款方案

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++)

3、利用条件

x1=20-8*x8-5*x5-3*x3-2*x2;
result=2000.0*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);进行判断

4、如果result>max,则

max=result;
y1=x1;
y2=x2;
y3=x3;
y5=x5;
y8=x8;

5、将y1,y2,y3,y5,y8的值进行输出

三、程序流程图

 

四、代码实现

#include<stdio.h>
#include<math.h>
int main()
{
int x1,x2,x3,x5,x8,y1,y2,y3,y5,y8;
double max=0.0,result;
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;
result=2000.0*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(result>max)
{
max=result;
y1=x1;
y2=x2;
y3=x3;
y5=x5;
y8=x8;
}
}
printf("获得利息最多的存款方式为:\n");
printf("8年期限的存了%d次\n",y8);
printf("5年期限的存了%d次\n",y5);
printf("3年期限的存了%d次\n",y3);
printf("2年期限的存了%d次\n",y2);
printf("1年期限的存了%d次\n",y1);
}

 

posted @ 2023-04-21 21:51  jais  阅读(39)  评论(0编辑  收藏  举报