第二届_第二题_消费购物券
2016-02-18 11:29
246 查看
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
2 2
5 0
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
2 2
5 0
#include<iostream> #include<string.h> using namespace std; int price[100];//存储价格 int num[100]; //记录每个货物购买的个数 int cas[100][100];//cas[i][j]记录第i个方案中第j个物品的个数 int count;//记录方案数 int total;//物品种类数 void buy(int price[],int n,int money) //为了方便写临界条件,所以我们对商品从后往前选。 { int k,i; if(n==0) //所有的物品都被遍历完了 { if(money==0) //钱被用完了 { for(i=0;i<total;++i) { cas[count][i]=num[i]; } count++; } return ; } k=money/price[n-1]; //最多买第n件物品的数量 //从最后一个物品开始,先尽可能买最多,不够再看下一个。 for(i=k;i>=0;--i) { num[n-1]=i; buy(price,n-1,money-i*price[n-1]);//递归思想 } } int main() { int number,i,j; cin>>number; total=number; count=0; memset(cas,0,sizeof(cas));//二维数组初始化为0 for(i=0;i<number;++i) cin>>price[i]; buy(price,number,1000); cout<<count<<endl; for(i=0;i<count;++i) { for(j=0;j<number;++j) { cout<<cas[i][j]<<" "; } cout<<endl; } return 0; }
相关文章推荐
- Sitemesh的配置与使用
- tcpdump文件格式分析
- 和我一起学《HTTP权威指南》——连接管理
- The project was not built since its build path is incomplete
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- win7上安装alfresco ECM,使用mysql数据库
- Android最佳实践之SystemBar状态栏全版本适配方案
- 快递数据接口查询
- iptables全攻略
- eclipse下搭建Kotlin开发环境
- Android最佳实践之SystemBar状态栏全版本适配方案
- 从头认识Spring-2.7 自动检测Bean@Component @Repository @Service @Controller
- 博客园 Linux客户端 2.0 正式发布!
- saltstack/salt的state.sls的使用
- listView中button点击事件冲突
- python程序打包成exe执行文件
- uvaoj10085
- wordpress 在centos6.5 下安装配置
- 如何使用Liquibase
- 汉语是思维广阔敏捷的语言