#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> struct sKozeni{ int Maisu,SiharaiMaisu; const int Kingaku; sKozeni(int kingaku) :Kingaku(kingaku){} void Init(){ SiharaiMaisu = 0; } }; int main(){ int Siharai; sKozeni Kozeni[4]={ 10,50,100,500 }; while(1){ scanf("%d",&Siharai); if(Siharai==0){ // 終了条件 break; } for(int i=0 ; i<4 ; i++){ // 4種類の硬貨枚数を格納、変数の初期化 scanf("%d",&Kozeni[i].Maisu); Kozeni[i].Init(); } // 支払い金額に関係なく、枚数を減らす int i=0; while( i != 3 ){ if( (Kozeni[i].Maisu * Kozeni[i].Kingaku) > Kozeni[i+1].Kingaku ){ Kozeni[i].Maisu--; Kozeni[i+1].Maisu++; } else{ i++; } } // 金額の小さな硬貨から出して支払う i = 0; while(1){ if( Kozeni[i].Maisu>0 ){ Siharai -= Kozeni[i].Kingaku; // 支払額の更新 Kozeni[i].Maisu--; // 所持枚数を減らす Kozeni[i].SiharaiMaisu++; // 支払い枚数を増やす if( Siharai<=0 ){ // 支払い終わったらループ終了 break; } } else{ i++; // 小銭の種類を次へ移す } } // 出力 for(int i=0 ; i<4 ; i++){ if( Kozeni[i].SiharaiMaisu>0 ){ printf("%d %d\n",Kozeni[i].Kingaku,Kozeni[i].SiharaiMaisu); } } puts(""); } return 0; }
atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!
最近アクセスの多かったページランキングです。話題のページを見に行こう!