錢幣找零問題---貪心算法入門例題

筆者近期無心中發現了一篇關於貪心算法的博客,寫的真好。做爲一名算法萌新,感受這篇文章來入門真心不錯,因而摘記其中一個典型的關於貪心算法的例題。 博客傳送門:從零開始學貪心算法ios


錢幣找零問題

這個問題在咱們的平常生活中就更加廣泛了。假設1元、2元、5元、10元、20元、50元、100元的紙幣分別有c0, c1, c2, c3, c4, c5, c6張。如今要用這些錢來支付K元,至少要用多少張紙幣?用貪心算法的思想,很顯然,每一步儘量用面值大的紙幣便可。在平常生活中咱們天然而然也是這麼作的。在程序中已經事先將Value按照從小到大的順序排好。算法

下面上代碼:spa

#include<iostream>
#include<algorithm>
using namespace std;
const int N=7; 
int Count[N]={3,0,2,1,0,3,5};
int Value[N]={1,2,5,10,20,50,100};
  
int solve(int money) 
{
	int num=0;
	for(int i=N-1;i>=0;i--) 
	{
		int c=min(money/Value[i],Count[i]);
		money=money-c*Value[i];
		num+=c;
	}
	if(money>0) num=-1;
	return num;
}
 
int main() 
{
	int money;
	cin>>money;
	int res=solve(money);
	if(res!=-1) cout<<res<<endl;
	else cout<<"NO"<<endl;
}
相關文章
相關標籤/搜索