存钱问题
一、问题描述
假设银行整存整取存款不同期限的月利息为:
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); }