贪心入门:硬币问题

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

    0 ≤C1, C5, C10, C50,C100,C500 ≤ 10e9;

    0 ≤A ≤ 10e9;
输入:
C,=3,C=2,C。=1,C=3,C=0,C=2,A=620
输出
6(500元硬币1枚,50元硬币2枚,10元硬币1枚,5元硬币2枚,合计6枚)

思路:

这是个贴近生活的简单问题。凭直觉,可以得出如下正确的解答。
首先尽可能多地使用500元硬币;
剩余部分尽可能多地使用100元硬币:
剩余部分尽可能多地使用50元硬币;
剩余部分尽可能多地使用10元硬币:
剩余部分尽可能多地使用5元硬币;
最后的剩余部分使用1元硬币支付。

   或者、简而言之,优先使用面值大的硬币,代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=6;
int C[N],V[N]={1,5,10,50,100,500},A,tol;
int Min=0;

int main()
{   
    for(int i=0;i<6;i++) cin>>C[i];
    cin>>A;
    for(int i=5;i>=0;i--)
    {
    	Min=min(A/V[i],C[i]);
    	A-=Min*V[i];
    	tol+=Min;
    }
    cout<<tol;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值