硬币问题
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 }
以上是关于硬币问题的主要内容,如果未能解决你的问题,请参考以下文章