美文网首页
存钱问题

存钱问题

作者: 一路向后 | 来源:发表于2021-10-14 22:36 被阅读0次

    1.问题描述

    假设银行整存整取存款不同期限的月息利率为:
    0.63% 期限为1年
    0.66% 期限为2年
    0.69% 期限为3年
    0.75% 期限为5年
    0.84% 期限为8年
    现在已知某人手上有2000元, 要求通过计算选择出一种存钱方案,使得这笔钱存入银行20年后获得利息最多,假定银行对超出存款期限的那部分时间不付利息.

    2.问题分析

    为了获得到最多的利息,应该在存入银行的钱到期后马上就取出来,然后再立刻将原本的本金加上当前所或利息作为新的本金存入银行,这样反复操作直到年限满20年为止。

    3.源码实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        long max = 0, cur = 0;
        float rate[] = {0.63, 0.66, 0.69, 0.75, 0.84};
        int a[] = {1, 2, 3, 5, 8};
        int b[] = {0, 0, 0, 0, 0};
        int c[] = {0, 0, 0, 0, 0};
        int d[] = {0, 0, 0, 0, 0};
        short e[] = {1, 0, 0, 0, 0, 0};
        int m = 5;
        int n = 20;
        int u = 0;
        int i = 0, j = 0, k = 0;
    
        for(i=0; i<m; i++)
        {
            c[i] = n / a[i];
    
            if(n % a[i] == 0)
            {
                c[i]++;
            }
        }
    
        while(1)
        {
            for(i=0; i<m; i++)
            {
                e[i+1] = 0;
    
                if(d[i]+e[i] >= c[i])
                {
                    d[i] += e[i];
                    d[i] -= c[i];
    
                    e[i+1]++;
                }
                else
                {
                    d[i] += e[i];
                    break;
                }
            }
    
            if(e[m] == 1)
            {
                break;
            }
    
            u = 0;
    
            for(i=0; i<m; i++)
            {
                u += a[i]*d[i];
            }
    
            if(u == n)
            {
                cur = 200000;
    
                for(i=0; i<m; i++)
                {
                    for(j=0; j<d[i]; j++)
                    {
                        cur *= (1+a[i]*rate[i]*12/100);
                    }
                }
    
                if(cur > max)
                {
                    for(i=0; i<m; i++)
                    {
                        b[i] = d[i];
                    }
    
                    max = cur;
                }
            }
        }
    
        printf("%d %d %d %d %d, money=%.2lf\n", b[0], b[1], b[2], b[3], b[4], max/100.0);
    
        return 0;
    }
    

    4.编译源码

    $ gcc -o test test.c -std=c89
    

    5.运行及其结果

    ./test
    0 0 0 4 0, money=8841.01
    

    6.结果解释

    存4次5年,利息最多,共计本息8841.01

    相关文章

      网友评论

          本文标题:存钱问题

          本文链接:https://www.haomeiwen.com/subject/haqpoltx.html