程序设计:贪心算法解决硬币问题

来源:互联网 发布:被子品牌推荐知乎 编辑:程序博客网 时间:2024/05/22 11:35

硬币问题

问题描述:
有1元、5元、10元、50元、100元、500元的硬币各C1,C5,C10,C50,C100,C500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?假设本题至少存在一种支付方案。
限制条件:
0<=C1,C5,C10,C50,C100,C500<=10的9次方
0<= A <= 10的9次方
输入:
C1 = 3
C2 = 2
C10 = 1
C50 = 3
C100 = 0
C500 = 2
A = 620
输出:
6(500元硬币1枚,50元硬币2枚,10元硬币1枚,5元硬币2枚,合计6枚)

思路:为了尽量地减少硬币的数量,我们首先得尽可能多地使用500元硬币,剩余部分尽可能多地使用100元硬币,剩余部分尽可能多地使用50元硬币,剩余部分尽可能多地使用10元硬币,再剩余部分尽可能多地使用5元硬币,最后的部分使用1元硬币支付。
也就是优先使用大面值的硬币。使用贪心算法

主要代码部分:

const int V[6] = {1,5,10,50,100,500}//输入int C[6];int A;void solve(){  int ans = 0;  //对5个面值的硬币一一进行判定  for(int i = 5; i>= 0;i--)  {  //取最小值:接下来最大面值硬币数量和钱数与该面值的比值,哪个小就把值赋给t,这个值就是当前面值的硬币应该取的数量,然后一一加起来得到最终的数量    int t = min(A/V[i],C[i]);    A -= t * V[i];    ans += t;    } printf("%d\n",ans);}
0 0
原创粉丝点击