有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;
}