1. 程式人生 > >C語言找零問題

C語言找零問題

1.找零問題

    錢的面值有1毛,5毛,1塊,5塊,10塊,20塊,50塊,100塊,大於100的就不算找零了,用貪心演算法來找零,使得每次找零的錢的張數和最小

2.程式碼:

#include <stdlib.h>
#include <stdio.h>



void change(double money, double pay)
{
	
	int count[7] = {0}; //個個面值錢的張數
	
	double change= money - pay;//找零的錢
	
	while (change > 0) {

	
	if (change >= 500) {
		change = change - 500;		
		count[6] ++;

	}
	if (change>=200&&change<500)
	{
		change = change -200;
		count[5] ++;
	}
	if (change >= 100 && change < 200)
	{
		change = change -  100;
		count[4] ++;
	}
	if (change >= 50 && change < 100)
	{
		change = change -  50;
		count[3] ++;
	}
	if (change >= 10 && change < 50)
	{
		change = change - 10;
		count[2] ++;
	}
	if (change >= 5&&change < 10)
	{
		change = change - 5;
		count[1]++;
	}
	if (change < 5)
	{
		change = change - 1;
		count[0]++;
	}

	}
	

        //列印陣列
	for (int i = 0; i < 7; i++)
	{
		printf("%d\t", count[i]);
	}
	printf("\n");
}

int main()
{
	printf("找零:找零1毛,5毛,1塊,5塊,10塊,20塊,50塊的零錢,大於100不算零錢了\n");

	double money = 100;
	double pay = 14.6;
	printf("給了%.1f,花費%.1f\n", money, pay);
	printf("輸出相應零錢的張數:\n");
	money = money * 10;				//因為double的精度不到0.1所以把錢面值擴大10倍
	pay = pay * 10;
	printf("0.1	0.5	1	5	10	20	50 \n");
	change(money, pay);
	system("pause");
	return 0;

}

3.執行結果: