称砝码,求能称处理的种数Java
程序员文章站
2022-07-12 08:11:41
...
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
注:称重重量包括0
//所有的方案全部放入Set中,同时再用一个ArrayList来保存各种可能性,最后输出set的数量
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int[] weight = new int[n];//每个砝码的重量
int[] num = new int[n];//砝码的数量
//将数据输入数组中去
for(int i=0;i<n;i++){
weight[i] = sc.nextInt();
}
for(int i=0;i<n;i++){
num[i] = sc.nextInt();
}
Set<Integer> set = new HashSet<>();
for(int i=0;i<=num[0];i++){
set.add(weight[0]*i);
}
for(int i=1;i<n;i++){//第i个砝码的重量
//把上一个砝码的所有可能性放入list中
List<Integer> list = new ArrayList<>(set);
for(int j=0;j<=num[i];j++){//第i个砝码的数量
//如果不先把第一组数据放入list,这里的list.size()就为0
for(int k=0;k<list.size();k++){
set.add(list.get(k)+weight[i]*j);
}
}
}
System.out.println(set.size());
}
sc.close();
}
}
推荐阅读