100C之14:如何获得最大投资利益

Table of Contents

问题

假设银行整存整取不同期限的月利息为

年份月利率
1 0.63%
2 0.66%
3 0.69%
5 0.75%
8 0.84%

利息 = 本金X月息利率X12X存款年限. 假定银行对超过存款期限的那部分时间不服利息. 现在某人手中有2000元,计算一种方案,使得钱存入银行20年后得到最多利息。

分析

假设该人一年期的存款存$n1$次,二年期的存款存$n2$次,三年期的存款存$n3$次,五年期的存款存$n5$次,八年期的存款存$n8$次,则最后的总收入为

\begin{eqnarray} y&=&2000(1 + 0.0062\times 12)^{n_{1}}(1 + 0.0066\times 12\times 2)^{n_{2}}(1 + 0.0069\times 12\times 3)^{n_{3}} \nonumber \\ & &\times(1 + 0.0075\times 12\times 5)^{n_{5}}(1 + 0.0084\times 12\times 8)^{n_{8}} \end{eqnarray}

其中$n1$,$n2$,$n3$,$n5$,$n8$满足约束如下约束关系

\begin{equation} 0\le n_{1} \le 20 \end{equation} \begin{equation} 0\le n_{2} \le (20 - n_{1})/2 \end{equation} \begin{equation} 0\le n_{3} \le (20 -n_{1}-2n_{2})/3 \end{equation} \begin{equation} 0\le n_{5} \le (20-n_{1}-2n_{2}-3n_{3})/5 \end{equation} \begin{equation} 0\le n_{8} \le (20-n_{1}-2n_{2}-3n_{3}-5n_{5})/8 \end{equation}

综上分析穷举计算出最大值即可

解决方案

 1:  /**
 2:   * @file   014getmaximumprofit.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Tue May 14 18:22:20 2013
 5:   * 
 6:   * @brief  假设银行整存整取不同期限的月利息为
 7:   *         1年       0.63%
 8:   *         2年       0.66%
 9:   *         3年       0.69%
10:   *         5年       0.75%
11:   *         8年       0.84%
12:   *   利息 = 本金X月息利率X12X存款年限 
13:   *   现在某人手中有2000元,计算一种方案,使得钱存入银行20年后得到最多利息。
14:   *   假定银行对超过存款期限的那部分时间不服利息
15:   */
16:  
17:  #include <stdio.h>
18:  #include <math.h>
19:  
20:  
21:  int main(int argc, char *argv[])
22:  {
23:      int n1,n2,n3,n5,n8;
24:      int m1,m2,m3,m5,m8;
25:      float total=0;
26:      float maximum=0;
27:      for ( n1 = 0; n1 <= 20; ++n1)
28:      {
29:          for ( n2 = 0; n2 <= ( 20-n1 )/2; ++n2)
30:          {
31:              for ( n3 = 0; n3 <= ( 20-n1-2*n2 )/3 ; ++n3)
32:              {
33:                  for ( n5 = 0; n5 <= ( 20-n1-2*n2-3*n3 )/5; ++n5)
34:                  {
35:                      for ( n8 = 0; n8 <= ( 20-n1-2*n2-3*n3-5*n5 )/8; ++n8)
36:                      {
37:                          total = 2000*pow( 1+0.0063*12 , n1)*pow( 1+0.0066*12*2 , n2)*pow( 1+0.0069*12*3 , n3)
38:                                  *pow( 1+0.0075*12*5 , n5)*pow( 1+0.0084*12*8 , n8);
39:                          if (total>maximum)
40:                          {
41:                              maximum=total; 
42:                              m1=n1;
43:                              m2=n2;
44:                              m3=m3;
45:                              m5=n5;
46:                              m8=n8;
47:                          }
48:                      }
49:                  }
50:              }
51:          }
52:      }
53:      printf ("the total money is %f, with 1-year %d times\n with 2-year %d times\n with 3-year %d times\n
54:                with 5-year %d times\n with 8-year %d times\n", maximum, m1,m2,m3,m5,m8);
55:      return 0;
56:  }
posted @ 2013-05-14 19:27  emacsun  阅读(198)  评论(0编辑  收藏  举报