贪婪算法基本思路:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能块地求得更好的解.当达到算法中的某一步不能再继续前进时,就停止算法,给出近似解.
-不能保证最后的解释最优的;
-不能用来求最大或者最小解的问题;
-只能求满足某些约束条件的可行解得范围.
实例:换零钱
Java代码描述
public class Test { static int MAXN = 9; static int[] parvalue = {10000,5000,1000,500,200,100,50,20,10}; static int[] num = new int[9]; public static void main(String[] args) { int i; float m; System.out.println("请输入要处理的金额"); Scanner sc = new Scanner(System.in); m = sc.nextFloat(); exchange((int)(100*m)); System.out.println("零钱组成为"); for(i=0;i<MAXN;i++){ if(num[i]>0){ System.out.println((float)(parvalue[i]/100.0)+"元 "+num[i]+"张"); } } } public static void exchange(int n){ int i; for(i = 0;i<MAXN;i++){ if(n>parvalue[i]){ //找到最大面额 break; } } 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++; } } } }
运行结果: