欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

称砝码,求能称处理的种数Java

程序员文章站 2022-07-12 08:11:41
...

现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
注:称重重量包括0
称砝码,求能称处理的种数Java

//所有的方案全部放入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();
    }
}
相关标签: 练习题 java