统计硬币
2015-09-16 23:06
232 查看
题目描述
假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。
输入格式
输入数据第一行有一个正整数T,表示有T组测试数据。接下来的T行,每行有两个数n,m,n和m的含义同上。
输出
对于每组测试数据,请输出可能的组合方式数,每组输出占一行。
样例输入 2 3 5 4 8
样例输出 1 2
BF的方法是先求出1,2,5可能的硬币数,然后对每种可能结果判断它们时候满足两个条件
硬币数和为n,面值和为m
优化的方法可以先从面值最大的5考虑,在只使用给定数目的5的数目硬币时,判断剩余数目的银币数(只有1,2)和钱数是否满足
假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。
输入格式
输入数据第一行有一个正整数T,表示有T组测试数据。接下来的T行,每行有两个数n,m,n和m的含义同上。
输出
对于每组测试数据,请输出可能的组合方式数,每组输出占一行。
样例输入 2 3 5 4 8
样例输出 1 2
BF的方法是先求出1,2,5可能的硬币数,然后对每种可能结果判断它们时候满足两个条件
硬币数和为n,面值和为m
#include <iostream> #include <iomanip> #include <cmath> #include <cstring> #include <cstdio> using namespace std; int main() { int l; cin>>l; while(l--) { int n,m; cin>>n>>m; int time=0; int a,b,c; for(a=m/5;a>=0;--a) for(b=m/2;b>=0;--b) for(c=m;c>=0;--c) { if(a+b+c==n && 5*a+2*b+c==m) ++time; } cout<<time<<endl; } return 0; }
优化的方法可以先从面值最大的5考虑,在只使用给定数目的5的数目硬币时,判断剩余数目的银币数(只有1,2)和钱数是否满足
#include <iostream> #include <iomanip> #include <cmath> #include <cstring> #include <cstdio> using namespace std; int main() { int l; cin>>l; while(l--) { int n,m; cin>>n>>m; int time=0; int a,b,c; for(a=m/5;a>=0;--a) { b=n-a; c=m-5*a; if(b<=c && 2*b>=c) ++time; } cout<<time<<endl; } return 0; }
相关文章推荐
- 一个关于“权限正常,但是就是在该文件夹下创建文件失败”
- JZ2440 V2的OpenJTAG驱动安装(USB接口的) win7 64位机
- python2.6升级2.7的方法及升级后的故障处理
- iOS经典讲解之利用单例类封装对SQLite数据库增、删、查、改的操作
- cin.get(),cin,cin.getline()的区别
- Entity Framework 6 预热、启动优化
- python实现批量修改文件扩展名
- 求二叉树的宽度(结点的最大距离)
- XML解析
- AndroidStudio如何使用aar依赖包?
- MYVIMRC
- 虚方法
- poj2553 强连通
- ActionBar 添加按钮
- 如何使电脑网速加快,去掉系统的带宽限制
- 动态图片加到UIImageView中
- 第一百六十七天 how can I 坚持
- C#机制
- 大型互联网站解决海量数据的常见策略
- Linux 安装搜狗输入法