12.プライマリーシリーズは、お金の問題を保存します

お金の問題を保存

問題の説明

しこり毎月の金利期間の異なる銀行の預金金利を前提としています。

1年0.63パーセントの期間

0.66パーセント2年間

0.69パーセント3年間

0.75%の5年間

0.84パーセント8年間

今、誰かの手で2000元の預金金利の要件は、その部分が関心を払っていない時間の期間を超えている銀行預金を想定し、最大20年1つのシナリオを選択することでお金を節約計算した銀行の後にお金を稼ぐ持つことが知られています

分析

最も関心を得るために、銀行からお金の満了後すぐに取られ、その後、すぐに元元本プラス銀行の新しい首都として取得し、現在の金利に、そのようにする必要があります繰り返し操作20年間の人生までの20年間で、取得したアクセス期間の異なる組み合わせの関心は、その20年後、1年間と仮定すると同じではありませんので、対応する速度の異なる期間による堆積物が、同じではありませんまで時間保存したx1は、x2は時間×3の3年間を維持し、時間の2年間を保つ、X5時間は、5年の期間を保存し、8年のx8の時間を保存しながら、預金満期の収入総元本および利息は、次のとおりです。

2000 (1 + 0.063)^ X1 (1 + 0.066)^ X2(1 + 0.069)^ X3 (1 + 0.075)^ X5(1 + 0.084)式1のx8 ^

明らかに、最大2倍までの8年間の預金の数は、その預入期間の以下の制約条件を取得します:

0 <= X8 <= 2

0 <= X 5 <=(20から8 *×8)/ 5

0 <= X3 <=(20から8 x8-5の X5)/ 3

0 <= X 2 <=(20 - 8×8 - 5×5 -3X3)/ 2

X1 = 20 - 8x8-5x5-3x3-2x2と、X1> = 0

アルゴリズムの設計

式1及び預金期間の資格によると、あなたは、預金の量を調べるために、すべての可能なの徹底的にforループを使用することができます預金の最大量の問題の解決策であります

#include <stdio.h>
#include <math.h>

int main(void)
{
    int x1, x2, x3, x4, x5, x8;
    int y1, y2, y3, y5, y8;
    double max = 0.0, result;       /*!<result 变量存放最后结果*/
    /* !<使用for循环穷举所有可能存款方案 */
    for (x8 = 0; x8 <= 2;x8++) {
        for (x5 = 0; x5 <= (20 - 8*x8) / 5; x5++) {
            for (x3 = 0; x3 <= (20 - 8*x8 - 5*x5) / 2; x3++) {
                for (x2 = 0; x2 <= (20 - 8*x8 - 5*x5 - 3*x3) / 2; x2++) {
                    x1 = 20 - 8*x8 - 5*x5 - 3*x3 - 2*x2;    /* !< 存款期限限定条件 */
                    /* !< 判断条件 */
                    result = 2000.0*pow((1+0.0063*12), x1)
                                   *pow((1+2*0.0066*12), x2)
                                   *pow((1+3*0.0069*12), x3)
                                   *pow((1+5*0.0075*12), x5)
                                   *pow((1+8*0.0084*12), x8);
                    /* !< y1, y2, y3, y8用于记录获利最多的存放方式*/
                    if (result > max) {
                        max = result;   /* !< max变量存放当前的最大值*/
                        y1 = x1;
                        y2 = x2;
                        y3 = x3;
                        y5 = x5;
                        y8 = x8;
                    }
                }
            }
        }
    }
    /* !< 输出结果 */
    printf("获得利息最多的存款方式为:\n");
    printf("8年期限的存了%d 次\n", y8);
    printf("5年期限的存了%d 次\n", y5);
    printf("3年期限的存了%d 次\n", y3);
    printf("2年期限的存了%d 次\n", y2);
    printf("1年期限的存了%d 次\n", y1);
    printf("存款人最终的获得的本利合计: %0.2f\n", result);
}

/* !< pow function introduce */
/* double pow(double x, double y) */
/* function 计算x^y的值 */

/* !< output */
    获得利息最多的存款方式为:
    8年期限的存了0 次
    5年期限的存了4 次
    3年期限的存了0 次
    2年期限的存了0 次
    1年期限的存了0 次
    存款人最终的获得的本利合计: 8763.19

    Process returned 0 (0x0)   execution time : 0.005 s
    Press any key to continue.

おすすめ

転載: www.cnblogs.com/xuzhaoping/p/11484583.html