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

硬币问题

问题描述:
有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);
}
    原文作者:贪心算法
    原文地址: https://blog.csdn.net/qq_33026143/article/details/53075059
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞