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

2005rb4.c

#include <stdio.h>

#define N 4		// 硬貨の種類

int main(void)
{
	int pay;	// 支払い金額
	int yen[] = {10, 50, 100, 500};	// 各硬貨
	int num[N];	// 各硬貨の枚数
	int sum;	// 合計金額
	int diff;	// 差額
	
	int temp;	// 
	int i;	// ループ変数
	
	
	while(1){
		
		// 支払い金額の読み込み
		scanf("%d", &pay);
		
		// 0だったら終了
		if(pay == 0)
			break;
		
		// 各硬貨の枚数の読み込み
		for(i = 0; i < N; i++)
			scanf("%d", &num[i]);
		
		sum = 0;	// 合計金額を0に更新
		
		// 所持金の合計金額を求める
		for(i = 0; i < N; i++)
			sum += yen[i] * num[i];
		
		diff = sum - pay;		// 合計金額と支払い額の差額を求める
			
		
		// 差額の硬貨の枚数を現在の硬貨の枚数から引くことで、
		// 適切な支払いをするための硬貨の枚数を配列内に残す
		for(i = N - 1; i >= 0; i--){
			temp = diff / yen[i];	// 差額の硬貨の枚数を求める
			num[i] -= temp;			// 現在手持ちの硬貨の枚数から引く
			
			diff %= yen[i];			// 残った額を求める
		}
		
		// 残った硬貨の枚数が1枚以上なら出力
		for(i = 0; i < N; i++){
			if(num[i] > 0)
				printf("%d %d\n", yen[i], num[i]);
		}
		
	 	putchar('\n');
	} 

	return (0);
}