用硬币找钱,所取硬币个数最少

转载自硬币找钱问题

有1元,5元,10元,50元,100元,500元的硬币各C1 , C5 , C10 , C50 , C100 , C500 枚。现在要用这些硬币来支付A 元,最少需要多少枚硬币?假设本题至少存在一种支付方案。

对应可改为题目:

每个人可以选x元的商品,现在商品的价格有1元、3元、7元、11元、13元,对应的商品个数为1、2、3、4、5,求满足x元商品所拿的最少件数是多少

#include<iostream>
using namespace std;
//贪心算法
int x;//30
const int a[5] = { 1,3,7,11,13 };
int b[5];//现有的商品件数

int min(int a, int b)//比较现有的商品件数与所需要的商品件数,输出较小值
{
	if (a>b)
		return b;
	return a;
}
void number()//求件数总数
{
	int num = 0;
	for (int i = 4; i >= 0; i--)//先从最大的开始比较
	{
		int t = min(b[i], x / a[i]);
		x -= t*a[i];
		num += t;
	}
	cout << num << endl;
}

int main()
{
	for (int i = 0; i < 5; i++)
	{
		cin >> b[i];//不同价位商品的个数
	}
	cin >> x;   //输入30
	number();
	system("pause");
	return 0;
}

转载链接:算法(最少硬币问题)经典贪心算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值