早教吧 育儿知识 作业答案 考试题库 百科 知识分享

程公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。序输入:第一行是一个整数m,

题目详情
程公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
▼优质解答
答案和解析
  #include
  #include
  int *a,*b;
  //int c[20000];
  int n;
  int count = 0;
  void print()
  {
  int i;
  for(i = 0; i < n; i++)
  printf("%d ",b[i]);
  printf("\n");
  }
  void problem9(int total,int size)
  {
  if(size != n )
  {
  if(total == 0)//判断背包是否正装满
  {
  count++;//存放可行方案的个数
  print();//输出此可行解
  }
  else
  {
  problem9(total,size + 1);//未放入物品a【size】的情况
  if(total - a[size] >= 0)//判断放入a【size】后,是否会超出背包的承载
  {
  b[size]++;//使得a【size】对应物品的数量加1
  problem9(total - a[size],size);//放入物品a[size]的情况
  b[size]--;//使得相应的物品数量减1
  }
  }
  }
  }
  void main()
  {
  int i,j;
  scanf("%d",&n);
  a = (int*)malloc(sizeof(int) * n);
  b = (int*)malloc(sizeof(int) * n);
  for(i = 0; i < n; i++)
  scanf("%d",&a[i]);
  for(j = 0; j < n; j++)
  b[j] = 0;
  problem9(1000,0);
  printf("%d",count);
  }
看了 程公司发了某商店的购物券10...的网友还看了以下:

初一英语作文.有些人喜欢在网上购物,网上购物方便快捷,去商店购物可以亲眼见到.你喜欢哪种购物方式,把  2020-11-22 …

某书店出售一种挂历,每售出1本可获得10元利润.售出一部分后,每本书减价10元出售,全部售完.已知减  2020-12-15 …

某书店出售一种挂历,每售出一本可的得18元利润.售出一部分后每本减价10元出售,全部售完.已知减价出  2021-01-19 …

(1)某书店出售一中挂历,每售出一本可获得18元利润.售出一部分后,每本减价10元出售,全部售完.已  2021-01-19 …

某书店出售一种挂历,每卖出一本可获得18元利润,书店卖出一部分后每本减价10元,直至全部卖完,已知出  2021-01-19 …

1某书店出售一种挂历,每卖出1本可获得18元利润.书店卖出一部分后,每本减价10元,直至全部卖完.已  2021-01-19 …

某书店出售一种挂历,每售出1本可获得18元利润,售出一部分后,每本降价10元出售,全部售完.已知降价  2021-01-19 …

某书店出售一种挂历,每售出一本可获得18元利润,售出一部分后,每本降价10元出售,全部售完.已知降价  2021-01-19 …

某书店出售一种挂历,每售出1本可获得18元利润,售出一部分后,每本降价10元出售,全部售完.已知降价  2021-01-19 …

某书店出售一种挂历,每售出1本可获得18元利润,售出一部分后,每本降价10元出售,全部售完.已知降价  2021-01-19 …