贪心算法——硬币问题

题目描述

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

小结

自己能够看懂算法,并用代码实现,把整个代码还原。<(▰˘◡˘▰)>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackson61

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值