トップ 一覧 Farm 検索 ヘルプ 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);
 }