bacon_egg @ ウィキ コケいろ-Make Purse Light
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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