POJ 2683 經典模擬題:給定本金、年數、多種投資方案 (單利/複利、手續費),計算最終最大收益。
fund,投資年數 yearop 種方案,每種:flag (1=單利, 0=複利)、年利率 rate、手續費 charge年利息 = 當前本金 × 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; // 或按題目要求取最大值
年利息 = 當前總資產 × rate 利息計入本金 (滾雪球) 每年扣除手續費
int A = fund;
for (int i = 0; i < year; ++i) {
int interest = A * rate;
A = A + interest - charge;
}
最終收益 = A;
#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