/* 购物券消费方案
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。
每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价(0 lis = new ArrayList();
public static void print(){
for(int[] x:lis){
for(int y:x){
System.out.print(y+" ");
}
System.out.println();
}
}
// 上次记录的结果,和当前这次记录比较是否相同
public static boolean compare(int[] t){
if(temp==null) return false;
for(int i=0;i=b.length) return;
for(int i=0;i<=b[count];i++){
t[count] = i; // 保存当前i的值
f(n,b,t,count+1); // 迭代
if(!compare(t)){ // 去重
if(check(n,t)){ // 检测符合条件的组合 将数组添加到lis列表
lis.add(Arrays.copyOf(t, t.length));
}
}// 用temp记录结果,下次比较是否相同用(去重)
temp = Arrays.copyOf(t, t.length);
}
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("输入商品的种类数");
int num = scan.nextInt();
int[] n = new int[num]; // 保存商品价格
int[] b = new int[num]; // 保存每个商品最多有几个
for(int i=0;i
运行结果:
输入商品的种类数
2
200
300
2
2 2
5 0