+++++++++++高分求一初中奥数题算法 (不够再加) ++++++++++

993305 2004-01-01 12:04:01
现有一笔资金,想存20年,现知银行有5种存款方法,可存1年,2年,3年,5年,8年,问怎样存钱20年后可以得到最多的利息?

(注: 底金、不同存款方法的年利息 要求输入,
每次存款到期后,后面如再存,则本金为 底金+利息 )
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
993305 2004-01-01
  • 打赏
  • 举报
回复
PF PF

可是否还存在一个这样的问题:
如果计算出来的结果是 8:1
5:1
3:1
2:1
1:2
类似的,那 你怎么知道存款的顺序那, 顺序不一样,当然最后的 利息是肯定不同的,而程序的算法中并没有体现这一点, 算法是按 组合来安排的,我想我的要求应该是排列 !

???
zhangfjj 2004-01-01
  • 打赏
  • 举报
回复
14.怎样存钱利最大
假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
利息=本金*月息利率*12*存款年限。
现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。
*问题分析与算法
为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。
分析题意,设2000元存20年,其中1年存i1次,2年存i2次,3年存i3次,5年存i5次,8年存i8次,则到期时存款人应得到的本利合计为:
2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8
其中rateN为对应存款年限的利率。根据题意还可得到以下限制条件:
0<=i8<=2
0<=i5<=(20-8*i8)/5
0<=i3<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=i1=20-8*i8-5*i5-3*i3-2*i2
可以用穷举法穷举所有的i8、i5、i3、i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。
*程序与程序注释
#include<stdio.h>
#include<math.h>
void main()
{
int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;
float max=0,term;
for(i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/
for(i5=0;i5<=(20-8*i8)/5;i5++)
for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
{
i1=20-8*i8-5*i5-3*i3-2*i2;
term=2000.0*pow((double)(1+0.0063*12),(double)i1)
*pow((double)(1+2*0.0063*12),(double)i2)
*pow((double)(1+3*0.0069*12),(double)i3)
*pow((double)(1+5*0.0075*12),(double)i5)
*pow((double)(1+8*0.0084*12),(double)i8);
/*计算到期时的本利合计*/
if(term>max)
{
max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;
}
}
printf("For maxinum profit,he should so save his money in a bank:\n");
printf(" made fixed deposit for 8 year: %d times\n",n8);
printf(" made fixed deposit for 5 year: %d times\n",n5);
printf(" made fixed deposit for 3 year: %d times\n",n3);
printf(" made fixed deposit for 2 year: %d times\n",n2);
printf(" made fixed deposit for 1 year: %d times\n",n1);
printf(" Toal: %.2f\n",max);
/*输出存款方式*/
}
*运行结果
For maxinum profit,he should so save his money in a bank:
made fixed deposit for 8 year: 0times
made fixed deposit for 5 year: 4times
made fixed deposit for 3 year: 0times
made fixed deposit for 2 year: 0times
made fixed deposit for 1 year: 0times
Total:8841.01
可见最佳的存款方案为连续四次存5年期。

看看
tfafei 2004-01-01
  • 打赏
  • 举报
回复
学习!
zhangfjj 2004-01-01
  • 打赏
  • 举报
回复
呵呵,我下午才穿上的,这个贴子是我上午回的。^_^
glacierrr 2004-01-01
  • 打赏
  • 举报
回复
zhangfjj(小张)

刚看你穿裤衩,怎么现在又脱掉了
catf1sh 2004-01-01
  • 打赏
  • 举报
回复
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
按 zhangfjj(小张) 的数据来算,1,2,3,5,8的最小公倍数是120。
120年后:
i1=(1+0.63)^120;
i2=(1+0.66)^60;
i3=(1+0.69)^40;
i5=(1+0.75)^24;
i8=(1+0.84)^15;

求出五个数的大小。然后用穷举法求出满足n1*1+n2*2+n3*3+n5*5+n8*8=20且n1*i1+n2*i2+n3*i3+n5*i5+n8*i8为最大值时的n1,n2,n3,n5,n8。

n1,n2,n3,n5,n8按i1,i2,i3,i5,i8从大到小排列,就是最后结果。

假设:i5<i3<i8<i1<i2,最大值是n1=5,n2=1,n3=2,n5=1,n8=1。
则最后结果是:1个2年,5个1年,1个8年,2个3年,1个5年。


不知道这样算对不对...

cxjddd 2004-01-01
  • 打赏
  • 举报
回复
动态规划可以解的吧
993305 2004-01-01
  • 打赏
  • 举报
回复
FT
laogaifan 2004-01-01
  • 打赏
  • 举报
回复
晕死了,先算算每种存法折合成的利率最高,然后从高象低取。。。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧