贪婪法

/*贪婪法是一个不追求最优解,只希望得到较为满意的解的方法。
因为它省去了为找最优解而穷尽所需的时间,所以贪婪法一般可以快速
得到满意的解。贪婪法在求解过程的每一步都选取一个局部最优的策略,
把问题规模缩小,最后把每一步的结果合并起来形成一个全局解。
*/
/*贪婪法的基本步骤:
(1)从某个初始解出发
(2)采用迭代的过程,当可以向目标前进一步时,就根据局部最优策略,得到
一部分解,缩小问题规模。
(3)将所有解综合起来
*/
//实例 用贪婪法解硬币找零问题
/*假设有一种货币,它的面值为1分,2分,5分和1角的硬币,最少需要多少个硬币来
找出k分钱的零钱。按照贪婪法的思想,需要不断使用面值最大的硬币,如要找零的值
小于最大的硬币值,则尝试第二大的硬币,依次类推。*/
//代码清单:

#include<iostream>
using namespace std;

#define ONEFEN	1
#define TWOFEN	2
#define FIVEFEN	5
#define	ONEJIAO	10

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

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

	//不断尝试每一种硬币
	while(money>=ONEJIAO) { onejiao++; money -=ONEJIAO; }
	while(money>=FIVEFEN) { fivefen++; money -=FIVEFEN; }
	while(money>=TWOFEN)  { twofen++;  money -=TWOFEN; }
	while(money>=ONEFEN)  { onefen++;  money -=ONEFEN; }

	//输出结果
	cout<< "1角硬币数:"<<onejiao<<endl;
	cout<< "5分硬币数:"<<fivefen<<endl;
	cout<< "2分硬币数:"<<twofen<<endl;
	cout<< "1分硬币数:"<<onefen<<endl;

	return 0;
}

posted on 2011-12-31 00:24  1.曲待续  阅读(308)  评论(0编辑  收藏  举报

导航