公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
用c#这么写呀
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
用c#这么写呀
输入条件
1 总价a=1000
2 种类m为1...m
3 每类价格m1 m2 m3...mm
要求算m种商品组合后总价为1000计算:
1 数组a1[m]存种类 大于0;
a2[m]存每类价格,也就是a2[0]=m1,a2[1]=m2,a2[2]=m3,依此类推,价格不能为0;
a3[m]存每类最多的数量,也就是1000/a2[x],不要小数,比如a2[0]=10,则a3[0]=100,表示最多买100个这个商品;
list1集合存每种结果的数量,比如m=3 m1=10 m2=15 m3=20时list1第1行为 100 0 0 ,list1.count就是方案数.
2
2.1 第1次算单独买1种商品时刚好总价=1000的数量,循环m次,有符合结果存到list1
如上面的例子所示m=3时循环3次,得出2个结果
100 0 0 //10*100个
0 0 50 //20*50个
2.2 第2次算每买2种商品时总价=1000的情况,也就是只有2个种类有数量,其他种类买的数量是0。
上例中就是 1-2 1-3 2-3 这3种组合,每种组合用2个嵌套循环算出结果,如
for (i0=1;i0<=a3[0];i0++)
for (i1=1;i1<=a3[1];i1++)
if ((a2[0]*i0 + a2[1]*i1) == 1000) //符合结果
2.3 第3次算每买3种商品时总价=1000的情况,共有(m中取n组合)种组合,上例中就是1-2-3 情况,
每种组合用3个嵌套循环算出结果
for (i0=1;i0<=a3[0];i0++)
for (i1=1;i1<=a3[1];i1++)
for (i2=1;i2<=a3[2];i2++)
if ((a2[0]*i0 + a2[1]*i1 + a2[2]*i2) == 1000) //符合结果
...
2.4 依此,一直计算到第m次同时买m种商品时总价=1000的情况,得出结果,结束.
2.1到2.4用可用递归或条件循环.