贪婪法

贪婪法,也叫贪心算法,用于求问题的最优解。而此问题的解决是由一系列阶段组成。

贪婪法在求解过程的每一个阶段都选取一个在该阶段看似最优的解,然后把每一个阶段的结果合并起来形成一个全局解。

贪婪法并不是对所有问题都能得到最优解

在日常生活中,经常用贪婪法来寻求问题 的解。

如如何把孩子培养成为一个优秀的人才就是一个求最优解的问题,很多家长采用的就是贪婪法:在孩子成长的每一个阶段都让他接受最好的教育。

//贪婪法货币找零
#include <iostream>

using namespace std;

const int ONEFEN = 1;
const int TWOFEN = 2;
const int FIVEFEN = 5;
const int ONEJIAO = 10;

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

    cout << "输入要找零的钱(以分为单位):";
    cin >> money;

    if (money >= ONEJIAO)
    {
        onejiao = money / ONEJIAO;
        money %= ONEJIAO;
    }
    if (money >= FIVEFEN)
    {
        fivefen = 1;
        money -= FIVEFEN;
    }
    if (money >= TWOFEN)
    {
        twofen = money / TWOFEN;
        money %= TWOFEN;
    }
    if (money >= ONEFEN)
    {
        onefen = 1;
    }
    
    cout << "1角硬币数:" << onejiao << endl;
    cout << "5分硬币数:" << fivefen << endl;
    cout << "2分硬币数:" << twofen << endl;
    cout << "1分硬币数:" << onefen << endl;


    cin.ignore();
    cin.get();
    return 0;

}
//贪婪法组合最大三位数
#include <iostream>

using namespace std;



int main()
{

    int num = 0, max = 10, current;

    for (int digit = 100;digit > 0;digit /= 10)                    //100,10,1三个循环,
                                                                   //每次循环,都是寻找剩余元素中的最大值
    {
        current = 0;
        for (int n : {5, 6, 2, 8, 9, 3,7,1})
        {
            if (n > current&&n < max) current = n;
        }
        num += digit*current;
        max = current;                                             //注意这里的max,if里面的判断语句保证了寻找的是剩余的最大值
    }
    cout << num << endl;
    cin.ignore();
    cin.get();
    return 0;

}
原文地址:https://www.cnblogs.com/skylover/p/7110190.html