//有1元,5元,10元。50元,100元,500元的硬币各C1,C5,C10,C100
//C500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?假定
//本题至少存在一种支付方案
//input
// C1=3,C5=2,C10=1,C50=3,C100=0,C500=2,A=620
//output
// 6
#include "cstdio"
int C[6];
const int V[6]{1,5,10,50,100,500};
int A;
int min(int x,int y)
{
return x>y?y:x;
}
void solve()
{
int ans=0;//计算硬币数量
for(int i=5;i>=0;--i)
{
int n=min(A/V[i],C[i]);
A-=n*V[i];
ans+=n;
}
printf("%d\n",ans);
}
int main(int argc, char const *argv[])
{
for(int i=0;i<6;i++)
{
scanf("%d",&C[i]);
}
scanf("%d",&A);
solve();
return 0;
}
贪心算法:
不断选取面值最大的硬币以达到硬币数量最少的目的