/*
题目:存钱问题(枚举法)
内容:假设银行整存整取存款不同期限的月息利率为:
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;
由题意可知,显然8年期限的存款次数最多为两次,因此可得到下面对存款期限的限定条件:
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
0<=x1=(20-8*x8-5*x5-3*x3-2*x2)
*/
#include <stdio.h>
#include <math.h>
int main()
{
double money = 0,result;
int x1,x2,x3,x5,x8,y1,y2,y3,y5,y8;
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*pow((1+0.0063),x1)
*pow((1+0.0066),x2)
*pow((1+0.0069),x3)
*pow((1+0.0075),x5)
*pow((1+0.0084),x8);
if(result > money)
{
money = result;
y1 = x1;
y2 = x2;
y3 = x3;
y5 = x5;
y8 = x8;
}
}
}
}
}
printf("y1 = %d\ty2 = %d\ty3 = %d\ty5 = %d\ty8 = %d\t%f\n",y1,y2,y3,y5,y8,money);
return 0;
}