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

    ①不能保证最后的解释最优的
    ②不能用来求最大或最小解问题
    ③只能求满足某些约束条件的可行解的范围
    【ACM小白成长撸】--贪婪法解硬币找零问题

    question:假设有一种货币,它有面值为1分、2分、5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱。按照贪婪法的思想,需要不断地使用面值最大的硬币。如果找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推。
    /*程序的版权和版本声明部分:
    **从《C++程序设计思想与方法》(作者:翁惠玉)P61转载
    */

    include

    using namespace std;

    define ONEFEN 1

    define TWOFEN 2

    define FIVEFEN 5

    define ONEJIAO 10

    int main(void)
    {
    int money;
    int onefen = 0, twofen = 0, fivefen = 0, onejiao = 0;

    cout << "输入要找零的钱(以分为单位):";
    cin >> money;
    
    //不断尝试每一种硬币
    while(money >= ONEJIAO)
    {
        onejiao++;
        money = money - ONEJIAO;
    }
    while(money >= FIVEFEN)
    {
        fivefen++;
        money = money - FIVEFEN;
    }
    while(money >= TWOFEN)
    {
        twofen++;
        money = money - TWOFEN;
    }
    while(money >= ONEFEN)
    {
        onefen++;
        money = money - ONEFEN;
    }
    
    cout << "1角硬币数:" << onejiao << endl;
    cout << "5分硬币数:" << fivefen << endl;
    cout << "2分硬币数:" << twofen << endl;
    cout << "1分硬币数:" << onefen << endl;
    
    return 0;
    

    }
    贪婪法找零

    include

    using namespace std;
    int denomination[7]={100,50,20,10,5,2,1};

    int giveChange(int money,int (*result)[2])
    {

    int k=0;
    int sum=0;
    for(int i=0;i<7;i++)
    {
        if(money==0) break;
        if(money/denomination[i] > 0)
        {
            sum+=money/denomination[i] * denomination[i];
            result[k][0]=denomination[i];
            result[k][1]=money/denomination[i];
            money=money-sum;
            k++;
            
        }
     
    }
    return k;
    

    }

    int main()
    {
    int n; //钱总数

    while(cin>>n)
    {
     
        int result[100][2];
        int k=giveChange(n,result);
        cout<<"需要"<<k<<"张"<<endl;
        for(int i=0;i<k;i++)
        {
            cout<<result[i][0]<<"面币"<<result[i][1]<<"张"<<endl;
        }
        cout<<endl;
    }
    

    }

  • 相关阅读:
    sl跨域访问学习笔记2
    XAML标记扩展
    充分利用资源,实践中创新
    程序集版本号与文件版本号的区别
    项目管理: 软件质量的可靠保证
    未能将临时文件复制到输出目录中
    IBM DB2 UDB V8.1®,Oracle9i R2®,Microsoft SQL Server 2000® 技术比较分析
    Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结
    The remote procedure call failed and did not execute的解决办法
    快速解决IIS5故障一例
  • 原文地址:https://www.cnblogs.com/kongk/p/8642705.html
Copyright © 2011-2022 走看看