[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理脚本实现C语言趣味编程百例014:最大利息存钱

加分:1个技术分或者10个PB

要求用BAT脚本实现:

最大假设银行整存整取存款不同期限的月息利率分别为:
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的组合,代入求本利的公式计算出最大值,就是最佳存款方案。

*程序说明与注释
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;
  6. float max=0,term;
  7. for(i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/
  8. for(i5=0;i5<=(20-8*i8)/5;i5++)
  9. for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
  10. for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
  11. {
  12. i1=20-8*i8-5*i5-3*i3-2*i2;
  13. term=2000.0*pow((double)(1+0.0063*12),(double)i1)
  14. *pow((double)(1+2*0.0063*12),(double)i2)
  15. *pow((double)(1+3*0.0069*12),(double)i3)
  16. *pow((double)(1+5*0.0075*12),(double)i5)
  17. *pow((double)(1+8*0.0084*12),(double)i8);
  18. /*计算到期时的本利合计*/
  19. if(term>max)
  20. {
  21. max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;
  22. }
  23. }
  24. printf("For maxinum profit,he should so save his money in a bank:\n");
  25. printf(" made fixed deposit for 8 year: %d times\n",n8);
  26. printf(" made fixed deposit for 5 year: %d times\n",n5);
  27. printf(" made fixed deposit for 3 year: %d times\n",n3);
  28. printf(" made fixed deposit for 2 year: %d times\n",n2);
  29. printf(" made fixed deposit for 1 year: %d times\n",n1);
  30. printf(" Toal: %.2f\n",max);
  31. /*输出存款方式*/
  32. }
复制代码
*运行结果
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年期。
*思考题
某单位对职工出售住房,每套为2万元。买房付款的方法是:
一次交清,优惠20%
从第一年开始,每年年初分期付款:
5年交清,优惠50%;
10年交清,优惠10%;
20年交清,没有优惠。
现在有人手中正好有2万元,若假定在今后20年中物价和银行利率均保持不变,问他应当选择哪种付款方式可以使应付的钱最少?

结果不支持小数  貌似方案一致  重写

TOP

还是我来抛个砖
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a $=2000,#A=1,#B=2,#C=3,#D=5,#E=8
  3. set /a A=12*63+10000,B=#B*12*66+10000,C=#C*12*69+10000,D=#D*12*75+10000,E=#E*12*84+10000
  4. for /l %%a in (0 1 20) do (
  5.     if %%a lss 19 (
  6.        for /l %%b in (0 2 20) do (
  7.            set /a N=%%a+%%b
  8.            if !N! lss 18 (
  9.               for /l %%c in (0 3 20) do (
  10.                   set /a N=%%a+%%b+%%c
  11.                   if !N! lss 16 (
  12.                      for /l %%d in (0 5 20) do (
  13.                         set /a N=%%a+%%b+%%c+%%d
  14.                         if !N! lss 13 (
  15.                            for /l %%e in (0 8 20) do (
  16.                                set /a N=%%a+%%b+%%c+%%d+%%e
  17.                                if !N! equ 20 (
  18.                                   set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C,_D=%%d/#D,_E=%%e/#E
  19.                                   set "i=!$!"
  20.                                   FOR %%i in (A B C D E) do (
  21.                                       for /l %%j in (1 1 !_%%i!) do (
  22.                                           set /a "i*=%%i"
  23.                                           set i=!i:~,-4!
  24.                                       )
  25.                                    )
  26.                                    if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C! #D!_D! #E!_E!
  27.                                )
  28.                            )
  29.                         ) else if !N! equ 20 (
  30.                                   set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C,_D=%%d/#D
  31.                                   set "i=!$!"
  32.                                   for %%i in (A B C D) do (
  33.                                       for /l %%j in (1 1 !_%%i!) do (
  34.                                           set /a "i*=%%i"
  35.                                           set i=!i:~,-4!
  36.                                       )
  37.                                   )
  38.                                   if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C! #D!_D!
  39.                                )
  40.                      )
  41.                   ) else if !N! equ 20 (
  42.                             set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C
  43.                             set "i=!$!"
  44.                             for %%i in (A B C) do (
  45.                                 for /l %%j in (1 1 !_%%i!) do (
  46.                                     set /a "i*=%%i"
  47.                                     set i=!i:~,-4!
  48.                                 )
  49.                             )
  50.                             if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C!
  51.                          )
  52.               )
  53.            ) else if !N! equ 20 (
  54.                      set /a _A=%%a/#A,_B=%%b/#B
  55.                      set "i=!$!"
  56.                      for %%i in (A B) do (
  57.                          for /l %%j in (1 1 !_%%i!) do (
  58.                              set /a "i*=%%i"
  59.                              set i=!i:~,-4!
  60.                          )
  61.                      )
  62.                      if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B!
  63.                   )
  64.        )
  65.     ) else if %%a equ 20 (
  66.            set "i=!$!"
  67.            for /l %%i in (1 1 20) do (
  68.                set /a "i*=A"
  69.                set i=!i:~,-4!
  70.            )
  71.            if !i! gtr !#! set #=!i!&set @=#A20
  72.       )
  73. )
  74. for %%i in (!@!) do (
  75.     set str=%%i
  76.     if !str:~2! neq 0 for %%j in ("!str:~,2!") do  set var=!var! !%%~j!年期 !str:~2!次
  77. )
  78. echo 最大值: %#%%var%
  79. pause
复制代码
1

评分人数

    • HAT: 感谢分享技术 + 1

TOP

返回列表