c++打卡第十六天

一、问题描述。

 

 二、设计思路。

①、我们可以写出最终获得利息加本金的公式,即两千乘以利息加上其所存的年限,其中年限可以通过20除以不同的年限求得最大值。

②、获取各个年范围后,使用for循环穷举出每种情况所得的最终金额,同时打印出当所获得金额最大时,每个不同的存钱方案是用了几次。

③、获取最大值是通过与前边所得值不断比较,并且不断赋值,到最后打印出所获得最大值的情况。

三、流程图。

四、代码实现。

#include<iostream>
#include<cmath>
using namespace std;
int main() {
    double result=0;
    double max=0;
    int a,b,c,d,e;
    int x1,x2,x3,x5,x8;//存储利息最大值时各种存钱方案的次数
    //8年存钱方案最大期限次数为2
    //5年存钱方案最大期限次数为4
    //3年存钱方案最大期限次数为6
    //2年存钱方案最大期限次数为10
    //1年存钱方案最大期限次数为20,其中为了减少一些复杂度,我们for循环中使用20-x2-x3-x5-x8求x1;、
    for(a=0; a<3; a++) {
        for(b=0; b<=(20-a*8)/5; b++) {
            for(c=0; c<=(20-8*a-5*b)/3; c++) {
                for(d=0; d<=(20-8*a-5*b-c*3)/2; d++) {
                    e=20-a*8-b*5-c*3-d*2;
                    result=2000*pow(1+0.0063*12,e)*pow(1+0.0066*2*12,d)*pow(1+0.0069*3*12,c)*pow(1+0.0075*12*5,b)*pow(1+0.0084*12*8,a);
                    if(result>max) {
                        max=result;
                        x1=e;
                        x2=d;
                        x3=c;
                        x5=b;
                        x8=a;
                    }
                }
            }
        }
    }
    cout<<"存款一年的方案为:"<<x1<<"次,"<<"存款二年的方案为:"<<x2<<"次,"<<"存款三年的方案为:"<<x3<<"次,"<<"存款五年的方案为:"<<x5<<"次,"<<"存款八年的方案为:"<<x8<<"次。"<<endl;
    cout<<"总利息为:"<<max<<endl;
    return 0;
}

五、结果实现

 

posted @ 2023-04-26 16:46  七安。  阅读(11)  评论(0编辑  收藏  举报