标题: 批处理脚本实现C语言趣味编程百例014:最大利息存钱 [打印本页]
作者: HAT 时间: 2012-5-2 04:01 标题: 批处理脚本实现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的组合,代入求本利的公式计算出最大值,就是最佳存款方案。
*程序说明与注释- #include<stdio.h>
- #include<math.h>
- int 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年期。
*思考题
某单位对职工出售住房,每套为2万元。买房付款的方法是:
一次交清,优惠20%
从第一年开始,每年年初分期付款:
5年交清,优惠50%;
10年交清,优惠10%;
20年交清,没有优惠。
现在有人手中正好有2万元,若假定在今后20年中物价和银行利率均保持不变,问他应当选择哪种付款方式可以使应付的钱最少?
作者: terse 时间: 2012-5-3 16:19
结果不支持小数 貌似方案一致 重写
作者: terse 时间: 2012-5-20 02:22
还是我来抛个砖- @echo off&setlocal enabledelayedexpansion
- set /a $=2000,#A=1,#B=2,#C=3,#D=5,#E=8
- 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
- for /l %%a in (0 1 20) do (
- if %%a lss 19 (
- for /l %%b in (0 2 20) do (
- set /a N=%%a+%%b
- if !N! lss 18 (
- for /l %%c in (0 3 20) do (
- set /a N=%%a+%%b+%%c
- if !N! lss 16 (
- for /l %%d in (0 5 20) do (
- set /a N=%%a+%%b+%%c+%%d
- if !N! lss 13 (
- for /l %%e in (0 8 20) do (
- set /a N=%%a+%%b+%%c+%%d+%%e
- if !N! equ 20 (
- set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C,_D=%%d/#D,_E=%%e/#E
- set "i=!$!"
- FOR %%i in (A B C D E) do (
- for /l %%j in (1 1 !_%%i!) do (
- set /a "i*=%%i"
- set i=!i:~,-4!
- )
- )
- if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C! #D!_D! #E!_E!
- )
- )
- ) else if !N! equ 20 (
- set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C,_D=%%d/#D
- set "i=!$!"
- for %%i in (A B C D) do (
- for /l %%j in (1 1 !_%%i!) do (
- set /a "i*=%%i"
- set i=!i:~,-4!
- )
- )
- if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C! #D!_D!
- )
- )
- ) else if !N! equ 20 (
- set /a _A=%%a/#A,_B=%%b/#B,_C=%%c/#C
- set "i=!$!"
- for %%i in (A B C) do (
- for /l %%j in (1 1 !_%%i!) do (
- set /a "i*=%%i"
- set i=!i:~,-4!
- )
- )
- if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B! #C!_C!
- )
- )
- ) else if !N! equ 20 (
- set /a _A=%%a/#A,_B=%%b/#B
- set "i=!$!"
- for %%i in (A B) do (
- for /l %%j in (1 1 !_%%i!) do (
- set /a "i*=%%i"
- set i=!i:~,-4!
- )
- )
- if !i! gtr !#! set #=!i!&set @=#A!_A! #B!_B!
- )
- )
-
- ) else if %%a equ 20 (
- set "i=!$!"
- for /l %%i in (1 1 20) do (
- set /a "i*=A"
- set i=!i:~,-4!
- )
- if !i! gtr !#! set #=!i!&set @=#A20
- )
- )
-
- for %%i in (!@!) do (
- set str=%%i
- if !str:~2! neq 0 for %%j in ("!str:~,2!") do set var=!var! !%%~j!年期 !str:~2!次
- )
- echo 最大值: %#%%var%
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |