トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

05da4.c

#include <stdio.h>

#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);
}