在現實生活中,經常遇到找零問題,假設有數目不限的面值為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...