首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

POJ 2683 Ohgas' Fortune:利率計算模擬與精度處理

     編輯:關於C++

POJ 2683 經典模擬題:給定本金、年數、多種投資方案 (單利/複利、手續費),計算最終最大收益。

問題參數

  • 初始資金 fund,投資年數 year
  • op 種方案,每種:flag (1=單利, 0=複利)、年利率 rate、手續費 charge

收益計算公式

單利 (flag = 1)

年利息 = 當前本金 × rate
每年扣除手續費
本金不變,利息累積
int A = fund;           // 本金
int B = 0;              // 累積利息
for (int i = 0; i < year; ++i) {
    int interest = A * rate;
    A = A + interest - charge;  // 扣除手續費後的本金 (題目特殊規則)
    B += interest;
}
最終收益 = A + B;  // 或按題目要求取最大值

複利 (flag = 0)

年利息 = 當前總資產 × rate
利息計入本金 (滾雪球)
每年扣除手續費
int A = fund;
for (int i = 0; i < year; ++i) {
    int interest = A * rate;
    A = A + interest - charge;
}
最終收益 = A;

完整 C++ 實作

#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
    int cases;
    scanf("%d", &cases);
    while (cases--) {
        int fund, year, op;
        scanf("%d %d %d", &fund, &year, &op);
        
        int ans = -1;
        while (op--) {
            int flag, charge;
            double rate;
            scanf("%d %lf %d", &flag, &rate, &charge);
            
            int A = fund;
            if (flag == 1) {  // 單利
                int B = 0;
                for (int i = 0; i < year; ++i) {
                    int interest = static_cast(A * rate);
                    A = A - charge;  // 本金扣除手續費
                    B += interest;
                }
                ans = max(ans, A + B);
            } else {  // 複利
                for (int i = 0; i < year; ++i) {
                    int interest = static_cast(A * rate);
                    A = A + interest - charge;
                }
                ans = max(ans, A);
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

關鍵注意點

項目處理方式
利率精度輸入為 double,計算時 int(A * rate) 截斷向下取整
手續費扣除單利:本金扣除;複利:總資產扣除 (題目隱含規則)
結果取整最終答案為整數,中間過程保持整數運算
多方案比較遍歷所有方案,取最大最終收益

測試案例

輸入:
1
1000000 1 2
1 0.03 3000
0 0.02 2000

單利:1000000*0.03=30000,本金扣3000=997000,利息30000,總1027000
複利:1000000*0.02=20000,總資產1020000-2000=1018000
輸出:1027000

複雜度分析

  • 時間:O(cases × op × year) — 完全可接受 (year ≤ 10 等小數值)
  • 空間:O(1)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved