题解 | #称砝码#

称砝码

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

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 砝码种类,对应砝码数量, 输入的第几行
let [weightArr, weightNumArr, row] = [[], [], 0]
rl.on('line', function (line) {
    row++
    if(row === 2){
        weightArr = line.split(' ').map(Number)
    }else if(row === 3){
        weightNumArr = line.split(' ').map(Number)
        // 将所有砝码一一放进一个数组
        const Arr = []
        for(let i = 0; i < weightArr.length; i++){
            for(let j = 0; j < weightNumArr[i]; j++){
                // 把每种重量的所有砝码数量,比如有两个1g砝码, 三个2g砝码
                // 则这里循环完后,得到的结果就是 [1,1,2,2,2]
                Arr.push(weightArr[i])
            }
        }

        // 把砝码一个一个放进一个容器里面,得到不同称重的值
        // 每把一个砝码放进去,就会重新产生与容器中相同数量的砝码重量值
        // 比如原本有 [1,2],然后往里面增加一个2g砝码,就会产生一个[1+2,2+2]==>[3,4]的重量
        // 然后最终得到的重量值是 [1,2,3,4]

        // 使用set自动去重,注意使用扩展运算符会报错
        // 所以下面这里使用 Array.from 将有迭代器的内容转成数组
        let weights = new Set()
        weights.add(0)
        for(let i = 0; i < Arr.length; i++){
            let res = Array.from(weights)
            for(let w of res){
                weights.add(w+Arr[i])
            }
        }
        // 输出砝码重量种类
        console.log(weights.size)
    }
});

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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