题解 | #称砝码#
称砝码
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)
}
});
三奇智元机器人科技有限公司公司福利 88人发布
