最少钱币数
来源:互联网 发布:linux 显示文件夹内容 编辑:程序博客网 时间:2024/06/03 18:53
题目描述
这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了 6 种钱币面值为 2、5、10、20、50、100,用来凑 15 元,可以用 5 个 2 元、1个 5 元,或者 3 个 5 元,或者 1 个 5 元、1个 10 元,等等。显然,最少需要 2 个钱币才能凑成 15 元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
输入
输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值 M(1 <= M<= 2000,整数),接着的一行中,第一个整数 K(1 <= K <= 10)表示币种个数,随后是 K个互不相同的钱币面值 Ki(1 <= Ki <= 1000)。输入 M=0 时结束。
输出
每个测试用例输出一行,即凑成钱数值 M 最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。
样例输入
156 2 5 10 20 50 10011 20
样例输出
2Impossible
#include<iostream>#include<string>using namespace std; int m[1000]; int M; int p; int check() { int b,c,d=0; int p=0; int i,j; int s[10]; cin>>b; for( i=1;i<=b;i++) cin>>s[i]; for( i=1;i<=b;i++) for(j=1;j<=b-i;j++) if(s[j]>s[j+1]) { c=s[j]; s[j]=s[j+1]; s[j+1]=c; } for( i=b;i>0;i--) { while(M-s[i]>=0) { M-=s[i]; d++; } } if(M<=0) return d; else return 0;}int main() { int q; do { cin>>M; q=M; if(q==0) break; p++; m[p]=check(); }while(q>0); for(int j=1;j<=p;j++) { if(m[j]==0) cout<<"Impossible"<<endl; else cout<<m[j]<<endl; }return 0;}
0 0
- 最少钱币数
- 最少钱币数
- 最少钱币数
- 1031: 最少钱币数
- 问题 : 最少钱币数
- 最少钱币数梦幻王国
- 计算最少钱币数C++程序代码。
- ACM程序设计大赛-------- 最少钱币数(Java代码)
- CCF-训练50题-NO.29-最少钱币数
- 最少钱币数 - 动态规划法求解 - 可输出最终找零方案
- 最少钱币数 (2013中南大学年研究生上机复试题[暴力])
- C++动态规划 求换取指定数额钱币的最少货币数 普通动态规划和空间压缩方法
- ACM动态规划之最少钱币问题
- 1329 最小钱币张数
- 钱币组合方法数的问题
- 8595 钱币组合方法数的问题
- 用递归写最小钱币数
- 最少步数
- PHP json_encode() 函数介绍 与 中文问题
- HDU 5780 BestCoder Round #85 gcd (数论---欧拉函数)
- 个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?
- Educational Codeforces Round 15 C. Cellular Network
- unity MonoBehavior 函数执行顺序和生命周期
- 最少钱币数
- Crafting Winning Solutions
- <LeetCode> 题31:数组划分
- HDU1532——Drainage Ditches(网络流Dinic算法)
- 在霍格沃茨找零钱
- OSI七层协议每层的代表性协议举例
- 欢迎使用CSDN-markdown编辑器
- 个位数统计
- spring mvc 上传文件