硬币问题

Posted si-wuxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬币问题相关的知识,希望对你有一定的参考价值。

题目:有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,C5= 2,C10= 1,C50=3,C100= 0,C500= 2, A=620

输出:6

分析:这是生活中的实际问题,凭直觉,可以知道先使用最大的500的硬币,剩下的用100元 的硬币,再用50元的,再用10元的,再用5元的,最后用1元的。很明显这是一个贪心策略

具体代码实现如下:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int V[6]={1,5,10,50,100,500};
 5 int C[6];
 6 int A;
 7 
 8 int main()
 9 {
10     for(int i=0; i<6; i++)
11         cin>>C[i];
12     cin>>A;
13     int ans=0;
14     for(int i=5; i>=0; i--)
15     {
16         int t=min(A/V[i],C[i]);//t为使用硬币i的枚数
17         A-=t*V[i];
18         ans+=t; 
19     }
20     cout<<ans;
21     return 0;
22 }

以上是关于硬币问题的主要内容,如果未能解决你的问题,请参考以下文章

吸引硬币的磁力效应

用偏硬币模拟抛硬币的程序

最小硬币找零问题 - 回溯

硬币游戏---代码分析与改进

寻找最低硬币总量的最佳变化

软工作业: 硬币游戏—— 代码分析与改进