题目描述
有1元,5元,10元,50元,100元,500元的硬币,各\(C_1,C_5,C_{10},C_{50},C_{100},C_{500}\)枚。现在要用来支付A元,最少需要各种硬币多少。假定本题至少存在一种支付方案。
样例输入
\(C_1 = 3,C_5 = 2,C_{10} = 1,C_{50} = 3,C_{100} = 0,C_{500} = 2\) A = 620
样例输出
6(500的1个,50的2个,10的1个,5元的2个,合计6个)
题意分析
优先使用大面值。
AC 代码
# include <iostream>
# include <algorithm>
using namespace std;
const int V[6] = { 1,5,10,50,100,500 };
int C[6];//C[0]=c1, C[1]=c5,.....//这个注释看题目才能理解 呵呵~
int A;
void solve()
{
int ans = 0;
for (int i = 5; i >= 0; i--)//从面值最大的开始
{
if (V[i] != 0) //这里真的很坑,明明没有错误,但是运行,最后出结果 的时候就会崩溃掉!除数不能为0!一定要记住!!
{
int t = min(A / V[i], C[i]);//min 用到 # include <algorithm>;y = min(a, b); 若a<b, y = a; 否则y = b;
//使用硬币i 的枚数
A -= t * V[i];
ans += t;
}
}
printf("%d\n", ans);
}
int main()
{
for (int i = 0; i < 6; i++)
{
scanf("%d", &C[i]);
}
scanf("%d", &A);
solve();
getchar();
getchar();
return 0;
}
小结
自己能够看懂算法,并用代码实现,把整个代码还原。<(▰˘◡˘▰)>