zoukankan      html  css  js  c++  java
  • 数据结构和算法-贪婪算法

    1、算法名称:贪婪算法

    2、算法思路:

    从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。当达到算法中某一步不能再向前继续前进时,就停止算法,给出近似解

    3、该算法存在的主要问题

    1、不能保证最后的解释最优的

    2、不能用来求最大或最小解的问题

    3、只能求满足某些约束条件的可行解的范围

    4、实例:

    在买东西找零钱的时候,有多种找零钱的方式可以采取。如果按照贪婪算法是按照面值由大到小的顺序来找零的、
    代码:

    1. #include<stdio.h>
    2. #define MAXN 9
    3. int parvalue[MAXN]={10000,5000,1000,500,200,100,50,20,10};
    4. int num[MAXN]={0};
    5. int exchange(int n)
    6. {
    7. int i,j;
    8. for(i=0;i<MAXN;i++)
    9. if(n>parvalue[i]) break;//找到比n小的最大面额
    10. while(n>0&&i<MAXN)
    11. {
    12. if(n>=parvalue[i])
    13. {
    14. n-=parvalue[i];
    15. num[i]++;
    16. }else
    17. {
    18. if(n<10&&n>=5)
    19. {
    20. num[MAXN-1]++;
    21. break;
    22. }else i++;
    23. }
    24. }
    25. return 0;
    26. }
    27. int main()
    28. {
    29. int i;
    30. float m;
    31. printf("请输入找零的金额");
    32. scanf("%f",&m);
    33. exchange((int)100*m);
    34. printf(" %0.2f元零钱的组成 ",m);
    35. for(i=0;i<MAXN;i++)
    36. if(num[i]>0)
    37. printf("%6.2f: %d张 ",(float)parvalue[i]/100.0,num[i]);
    38. getch();
    39. return 0;
    40. }

    程序运行结果

    附件列表

    • 相关阅读:
      生产者消费者代码
      C++内存深入理解
      树、森林与二叉树的相互转换
      待卿长发及腰,我必凯旋回朝
      同一进程下的线程可以共享
      操作系统知识
      进程间通信方式
      从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”(转)

      AVL Tree 操作
    • 原文地址:https://www.cnblogs.com/aqyl/p/6860068.html
    Copyright © 2011-2022 走看看