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