转载自硬币找钱问题
有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;
}
转载链接:算法(最少硬币问题)经典贪心算法