贪婪算法的基本思路:从问题的某一个初始解出发,逐步逼近给定的目标,以尽可能快的求得更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出近似解。
由贪婪算法的特点和思路可以看出来,该算法存在以下问题:
1.不能保证最后的解是最优的
2.不能用来求最大或者最小解问题
3.只能求满足某些约束条件的可行解范围。
实例,找零钱。
#include <stdio.h> #define MAXN 9 int parvalue[MAXN] = {10000,5000,1000,500,200,100,50,20,10}; int num[MAXN] = {0}; int exchange(int n){ int i, j; for(i=0; i<MAXN; i++){ if(n>parvalue[i]){ break;//先找到比n小的最大面额 } } while(n>0 && i<MAXN){ if(n>=parvalue[i]){ n -= parvalue[i]; num[i]++; } else if(n<10 && n>=5){ num[MAXN-1]++; break; } else{ i++; } } return 0; } int main(void){ int i; float m; printf("请输入找零的金额"); scanf("%f",&m); exchange((int)100*m); printf(" %.2f元零钱的组成: ",m); for(i=0; i<MAXN; i++){ if(num[i]>0){ printf("%6.2f:%d张 ",(float)parvalue[i]/100.0,num[i]); } } getch(); return 0; }