贪婪算法的基本思路就是从问题的某一个初始解出发,逐步逼近给定的目标,以尽可能快的求的更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出近似解。
存在的问题:
1.不能保证最后的解是最优的
2.不能用来求最大解与最小解问题;
3.只能求满足条件的可行解。
案例:超市找零钱
#include"stdafx.h"
#include<iostream>
using namespace std;
#define MAX 10
float price[MAX]={10000,5000,2000,1000,500,100,50,10,5,1};
int num[MAX]={0};
void exchange(int m)
{
int i,j;
for(i=0;i<MAX;i++)
if(m>price[i]) break;//找到比n小的最大数值i
while(m>0&&i<MAX)
{
if(m>=price[i])
{num[i]++;m=m-price[i];}
else if(m>=1&&m<10)
{num[MAX-3]++; break; }
else i++;
}
}
int main()
{
int i;
float m;
cout<<"请输入要找的零钱:";
cin>>m;
cout<<m<<"元零钱的组成为:"<<endl;
exchange((int)(m*100));
for(int i=0;i<MAX;i++)
{cout<<price[i]/100<<":";
cout<<num[i]<<endl;
}
return 0;
}