69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int corpus=2000; //本金
int A,B,C,D,E; //对应年份个数
int a,b,c,d,e;
int Ayear=1,Byear=2,Cyear=3,Dyear=5,Eyear=8;
int sum = 20;
double accrual;//利息
double MAX_accrual=0;//最大利息
double Ainterest= 0.0063,Binterest= 0.0066,Cinterest= 0.0069; //个年份利率
double Dinterest= 0.0075,Einterest= 0.0084;
printf("\n**************\n");
for(A = 0 ;A<=20; A++)
{
for(B = 0; B<=10; B++)
{
for(C = 0; C<7; C++)
{
for(D = 0; D<=4; D++)
{
for(E = 0 ; E<3; E++)
{
if((Ayear*A) + (Byear*B) + (Cyear*C)+(Dyear*D) + (Eyear*E) == sum)
{
accrual=corpus*12*(Ayear*A*Ainterest+Byear*B*Binterest+
Cyear*C*Cinterest+Dyear*D*Dinterest+Eyear*E*Einterest);
if(MAX_accrual < accrual)
{
MAX_accrual = accrual;
printf("\n**************\n");
printf("A = %d\t B = %d\t C = %d\t D = %d\t E = %d\t",A,B,C,D,E);
printf("\nMAX_accrual = %lf\n",MAX_accrual);
a=A; b=B;c=C;d=D;e=E;
}
}
}//for e
}//for d
}//for c
}//for b
}//for a
printf("存%d个1年\t 存%d个2年\t 存%d个3年\t 存%d个5年\t 存%d个8年\t",a,b,c,d,e);
printf("\nMAX_accrual = %lf\n",MAX_accrual);
getch();
}
To: goodluckyxl
你的意思是这样么?
得到f的最大值就是要求的方案,对么?
for(x1 = 0; x1<= 20; x1++)
{
for(x2 = 0; x2<= 20; x2++)
{
for(x3 = 0; x3<= 20; x3++)
{
for(x4 = 0; x4<= 20; x4++)
{
for(x5 = 0; x5<= 20; x5++)
{
if(x1+ x2*2 + x3*3 + x4*4 + x5*5 == 20)
{
f = 0.63*x1 + 0.66*x2 + 0.69*x3 + 0.75*x4 + 0.84*x5;
}
}
}
}
}
}
float ben = 2000.00f;
float xi = 0.0f;
for(int i = 1; i<= 4; i++)
{
xi = ben*0.0075*12*5;
ben = ben+xi;
printf("存款第%d次后利息:%lf, 本金为:%lf\n",i,xi,ben);
}
printf("最终的利息为:%lf\n",ben-2000);
if((Ayear*A) + (Byear*B) + (Cyear*C)+(Dyear*D) + (Eyear*E) == sum)
{
corpus = 2000;
accrual=corpus*12*Ayear*A*Ainterest;
corpus += accrual;
accrual=corpus*12*Byear*B*Binterest;
corpus += accrual;
accrual=corpus*12*Cyear*C*Cinterest;
corpus += accrual;
accrual=corpus*12*Dyear*D*Dinterest;
corpus += accrual;
accrual=corpus*12*Eyear*E*Einterest; //如果E 为0 , 即:accrual==0
if(MAX_accrual < accrual) //则这步比较无意义
{
MAX_accrual = accrual;
printf("\n**************\n");
printf("A = %d\t B = %d\t C = %d\t D = %d\t E = %d\t",A,B,C,D,E);
printf("\nMAX_accrual = %lf\n",MAX_accrual);
a=A; b=B;c=C;d=D;e=E;
}
}
A n C D
----- - ------ -----------
0.63% 1 1.0756 1.075600000
0.66% 2 1.1584 1.076289924
0.69% 3 1.2484 1.076757536
0.75% 5 1.4500 1.077143588
0.84% 8 1.8064 1.076717423
----- - ------ -----------
A ;月息利率
n ;存款期限
C=1 + A*12*n ;存款期限结束后 (本金+利息)/本金 的比率
C=D^n ;该存款期限内的年(复利)利率
选最大可能的D进行存款,正好为4个5年期存款
最终获利
=2000*(1.45)^4-2000
=6841.0125
注:^为指数运算,D^n 等于 pow(D, n)
//特地证明了下.
//以下数值都按取整算;
按顺序存储: 1 . 3. 8
1年 年息:151
3年 年息:534
2个8年后年息:4331
按顺序存储: 8 .1. 3
2个8年年息:3225.6
1年 年息:243
3年 年息:861
总年息:4331
得到结论:
年息的多少跟存储的顺序无关
PS:不知上面野地里的人说的12楼的程序错在哪.偶自己米发现.
因为是穷举算法.跟存不存8年米什么关系.只要满足年份是20就行了.