zoukankan      html  css  js  c++  java
  • 贪婪算法

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

    由贪婪算法的特点和思路可以看出来,该算法存在以下问题:

    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;
    } 
  • 相关阅读:
    Android按钮事件的4种写法
    VB.NET转C#代码的工具
    C# FTP操作类
    Linq一对多联合查询
    软件工程师面试题(一)
    一道网传上海幼儿园升小学的数学题
    csdn博客刷点击率(java代码)
    .NET高端职位招聘要求
    csdn博客刷粉代码
    jQuery Ajax无刷新操作
  • 原文地址:https://www.cnblogs.com/zhaojianbin/p/5961410.html
Copyright © 2011-2022 走看看