zoukankan      html  css  js  c++  java
  • 存钱问题、利润最大问题

    1.假设银行一年整存零取得月息为8.9%(纯属娱乐哈),现在你手里有一笔钱,你打算在今后的100年中的年底取出10000元,到第10000年刚好取完,请问你现在该存多少?

    和传统的数学题不一样,这里需要逆推来计算。

    第i年年初的存款=(第(i+1)年年初存款+10000)/(1+0.089*12)

    #include<stdio.h>
    
    int main()
    {
        int i;
        float money=0;
        for(i=0;i<100;i++)
            money=(money+10000)/(1+0.089*12);
        printf("You just need to put %.2f in the Bank.
    ",money);
    }
    
    You just need to put 9363.30 in the Bank.

    哈哈,你没有听错,今年存不到一万,以后年年可以取出一万……

    2.可是,我却手里却没有1万…… 那么怎样存钱使利润最大呢?

    现在银行整存整取存款不同期限的月息利率分别为:

    0.63% 期限=1年
    0.66% 期限=2年
    0.69% 期限=3年
    0.75% 期限=5年
    0.84% 期限=8年
    利息=本金 * 月息利率 * 12 * 存款年限。

    题目和解答都源于网络,因为解答都挺好的所以就不做什么改动啦……

    为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。
    分析题意,设X元存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()
    {
        printf("How many money do you have?
    ");
        double money;
        scanf("%lf",&money);
        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=money*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:
    ");
        printf(" made fixed deposit for 8 year: %d times
    ",n8);
        printf(" made fixed deposit for 5 year: %d times
    ",n5);
        printf(" made fixed deposit for 3 year: %d times
    ",n3);
        printf(" made fixed deposit for 2 year: %d times
    ",n2);
        printf(" made fixed deposit for 1 year: %d times
    ",n1);
        printf(" Toal: %.2f
    ",max);
    }

    欢迎大家点击左上角的“关注”或右上角的“收藏”方便以后阅读。



    为使本文得到斧正和提问,转载请注明出处:
    http://blog.csdn.net/nomasp

  • 相关阅读:
    #ifndef 、 #define 、#endif使用解释
    基于小熊派Hi3861鸿蒙开发的IoT物联网学习【六】--智慧农业MQTT数据上传华为云
    C语言学习(三)
    c语言学习篇二【基础语法】
    简单图解OSI七层网络模型
    基于小熊派Hi3861鸿蒙开发的IoT物联网学习【五】
    使用Doxygen生成html/chm范例,方便源码阅读
    李宏毅《深度学习》P1----机器学习介绍
    keras实现Alexnet (cifar10数据集)
    cmake条件编译
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4483245.html
Copyright © 2011-2022 走看看