#include #define M 100 // データセット数の上限 // 単利の計算を行う関数 int sim(int resrc, int years, double rate, int chrg) { int i; int temp = 0; for(i = 0; i < years; i++){ temp += (resrc * rate); resrc -= chrg; } return (resrc + temp); } // 複利の計算を行う関数 int cmp(int resrc, int years, double rate, int chrg) { int i; for(i = 0; i < years; i++){ resrc += resrc * rate - chrg; } return (resrc); } int main(void) { int resrc; // 初期運用資金量 int years; // 運用年数 int intr; // 利子の種類(0:単利/1:複利) double rate;// 年利率 int chrg; // 毎年の手数料 int m, n; // データセット数、運用方法の種類数 int i, j; // ループ変数 int result; // それぞれの運用方法の最終資金を格納 int max[M] = {0}; // 各データセットの最大最終資金を格納する配列 scanf("%d", &m); for(i = 0; i < m; i++){ scanf("%d", &resrc); scanf("%d", &years); scanf("%d", &n); for(j = 0; j < n; j++){ scanf("%d %lf %d", &intr, &rate, &chrg); // 単利か複利かで分岐 switch(intr){ case 0 : result = sim(resrc, years, rate, chrg); break; // 単利 case 1 : result = cmp(resrc, years, rate, chrg); break; // 複利 } // 最大の最終資金ならば代入 if(result > max[i]) max[i] = result; } } // 出力 for(i = 0; i < m; i++) printf("%d\n", max[i]); return (0); }