Make Purse Light
Make Purse Light
これで合ってるかな.
もっとテストケース使って確かめたいけど,多分これでも意味は変わらないはず.
どんなことをしてるかというと,まず大きめな小銭で払っておつりをもらって,手元の小銭をわざわざ店員さんに両替してもらってる感じです.
#include <stdio.h> int main(void) { // ファイル出力準備 FILE *pfI; // 入力ファイルポインタ FILE *pfO; // 出力ファイルポインタ pfI = fopen("b.in", "r"); if(pfI == NULL) { printf("ERR: input file open\n"); return -1; } pfO = fopen("b.out","w"); if(pfO == NULL) { printf("ERR: output file open\n"); fclose(pfI); return -2; } // // 入力 // int p; // 値段 int s10, s50, s100, s500; // 初期の小銭 int m10, m50, m100, m500; // 小銭 while(1) { fscanf(pfI, "%d", &p); fscanf(pfI, "%d%d%d%d", &s10, &s50, &s100, &s500); m10 = s10; m50 = s50; m100 = s100; m500 = s500; if(p == 0) // 終了 break; // // 処理 // printf("%d\n", p); // 大きなお金で払っちゃう if(m500 > 0 && p > 0) { p -= 500; m500--; } if(m100 > 0 && p > 0) { p -= 100; m100--; } if(m50 > 0 && p > 0) { p -= 50; m50--; } if(m10 > 0 && p > 0) { p -= 10; m10--; } printf("%d %d %d %d : %d\n", m10, m50, m100, m500, p); // 全部10円玉でもらう m10 -= p / 10; printf("%d %d %d %d : %d\n", m10, m50, m100, m500, p); // 10円玉を50円玉に両替してもらう while(m10 >= 5) { m50 += 1; m10 -= 5; } printf("%d %d %d %d : %d\n", m10, m50, m100, m500, p); // 50円玉を100円玉に両替してもらう while(m50 >= 2) { m100 += 1; m50 -= 2; } printf("%d %d %d %d : %d\n", m10, m50, m100, m500, p); // 100円玉を500円玉に両替してもらう while(m100 >= 5) { m500 += 1; m100 -= 5; } printf("%d %d %d %d : %d\n", m10, m50, m100, m500, p); printf("\n"); // // 出力 // if(s10 - m10 > 0) fprintf(pfO, "10 %d\n", s10 - m10); if(s50 - m50 > 0) fprintf(pfO, "50 %d\n", s50 - m50); if(s100 - m100 > 0) fprintf(pfO, "100 %d\n", s100 - m100); if(s500 - m500 > 0) fprintf(pfO, "500 %d\n", s500 - m500); fprintf(pfO, "\n"); } //ファイルポインタを閉じる fclose(pfI); fclose(pfO); return 0; }