题解 | #称砝码#

称砝码

https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

把每一行中的数值取出来的方式怎么都是错的。后面参考了别人将数据写进去的方式。

思路是:

1.先求出每个物品的数量和质量。

2.将数量保存进一个去重set中。

3。遍历物品i的数量。将set中已有的值与这个物品累加后依次相加。假设现在set中有数组[3,4,6]。有一个物品i的质量为2,这个物品i的数量为3.则需要将set的值分别与(2,4,6)进行累加。

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            // 数量
            int n = in.nextInt();
            // 初始化一个0进去
            Set set=new HashSet<>();
            set.add(0);
            // 重量集合
            int[] weights = new int[n];
            int[] nums = new int[n];
            for (int i = 0; i < n; i++) {
                weights[i] = in.nextInt();
            }
            for (int i = 0; i < n; i++) {
                nums[i] = in.nextInt();
            }
            for (int i=0;i<n;i++) {
                // 第i个物品对应的重量
                int wight = weights[i];
                // 第i个物品对应数量
                int num = nums[i];
                List<Integer> list =new ArrayList<>(set);
                for(int j=1;j<=num;j++) {
                    // 与已有不重复的数据做加法
                    for(int res:list) {
                        // 遍历每一个相同质量的砝码,根据砝码的数量相乘依次与已有数据进行累加
                        // 比如砝码质量2,有三个,则需要把之前的分别与(2,4,6进行累加)
                        set.add(res+ (wight*j));
                    }
                }
            }
            System.out.println(set.size());
        }
    }
}

全部评论

相关推荐

下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
_mos_:忍耐王
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务