1000元购物卷买票
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价(0<m<1000)。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
2 2
5 0
输入:
2
500
800
则应输出:
1
2 0
输入:
1
999
则应输出:
0
多个方案间的顺序不重要。
1 #include<stdio.h> 2 #include<malloc.h> 3 int main() 4 { 5 int m,sum; 6 scanf("%d",&m);//m种商品 7 int *p=(int*)malloc(sizeof(int)*m);//存储价格 8 int *i=(int*)malloc(sizeof(int)*m);//存放方案 9 int *max=(int*)malloc(sizeof(int)*m); 10 int count=0;//记录方案总数 11 for(int j=0;j<m;j++) 12 { 13 i[j]=0;//初始化方案数 14 scanf("%d",p+j); 15 max[j]=1000/p[j]; 16 } 17 while(i[0]<=max[0]) 18 { 19 for(int j=m-1;j>=0;j--) 20 { 21 i[j]++; 22 if(i[j]>max[j]&&j) i[j]=0; 23 else break; 24 } 25 sum=0; 26 for(int j=0;j<m;j++) sum+=p[j]*i[j];//计算 27 if(sum==1000) 28 { 29 count++; 30 for(int j=0;j<m;j++) printf("%-4d",i[j]); 31 putchar('\n'); 32 } 33 } 34 printf("总共有 %d 方案\n",count); 35 system("pause"); 36 return 0; 37 }

浙公网安备 33010602011771号