Make Purse Light

mike090524

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