找零錢問題(C語言實現) 貪心演算法應用(1)

2021-12-30 01:25:38 字數 1067 閱讀 9800

在現實生活中,經常遇到找零問題,假設有數目不限的面值為20,10,5,1的硬幣。

給出需要找零數,求出找零方案,要求:使用數目最少的硬幣。

對於此類問題,貪心演算法採取的方式是找錢時,總是選取可供找錢的硬幣的最大值。比如,需要找錢數為25時,找錢方式為20+5,而不是10+10+5。

下面是c語言實現(dev c++4.9.9.2執行通過)

[cpp] 

#include  

void greedymoney(int m,int k,int n); 

int main(void) 

;   int k; 

k = sizeof(money)/sizeof(money[0]);  

greedymoney(money,k,25); 

system("pause"); }  

/**  m:存放可供找零的面值,降序排列 

*   k:可供找零的面值種類數 

*   n:需要找零數 

*/ void greedymoney(int m,int k,int n) 

}  printf("\n"); 

} #include

void greedymoney(int m,int k,int n);

int main(void)

;  int k;

k = sizeof(money)/sizeof(money[0]);

greedymoney(money,k,25);

system("pause");}/*

*  m:存放可供找零的面值,降序排列

*   k:可供找零的面值種類數

*   n:需要找零數

*/void greedymoney(int m,int k,int n)

}printf("\n");

}需要說明的是,在一些情況下,找零錢問題使用貪心演算法並不能得到整體最優解,其結果可能只是最優解的很好近似。

比如,如果提供找零的面值是11,5,1,找零15。

使用貪心演算法找零方式為11+1+1+1+1,需要五枚硬幣

而最優解為5+5+5,只需要3枚硬幣。

貪心演算法解決找零錢問題

4.1 找零問題 問題描述 設有50 20 10 5 1 0.5 0.1等面額的零錢,顧 客購物花了n元,在支付 n 100 1 100元後,收銀員應如何找 零,才能使找回的錢數最少。輸入 n,表示顧客所花的錢數,最多包含一位小數。輸出 找回的零錢數。樣例輸入 67.5 243 樣例輸出 5 4 a...

換零錢實現之貪心演算法

貪心演算法的基本思路 從問題的某一步初始化解出逐步逼近給定的目標,以盡可能快地求得更好的解。當達到演算法中的某一步不能再繼續前進時,就停止演算法,給出近似解。下面就乙個例子來說明貪心的實現過程 就以乙個換零錢的例子吧,輸入乙個數字的面額,求出用100,50.等等面額怎麼才能換成像對應的錢 inclu...

貪心演算法找零問題

找零問題 假設商店老闆需要找零n元錢,錢幣的面額有 100元 50元 20元 5元 1元,如何找零使得所需錢幣的數量最少?greedy algorithm money 100,50,20,5,1 defchange money x change 0,0,0,0,0 for i,m in enumer...