【华为机试刷题笔记】HJ41-称砝码

【华为机试刷题笔记】HJ41-称砝码_第1张图片

题目描述

现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ;
每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
注:称重重量包括 0
数据范围:每组输入数据满足 1 ≤ n ≤ 10 1≤n≤10 1n10 1 ≤ m i ≤ 2000 1≤m_{i} ≤2000 1mi2000 1 ≤ x i ≤ 10 1≤x _{i} ≤10 1xi10

输入描述:
对于每组测试数据:
第一行:n — 砝码的种数(范围[1,10])
第二行:m1 m2 m3 … mn — 每种砝码的重量(范围[1,2000])
第三行:x1 x2 x3 … xn — 每种砝码对应的数量(范围[1,10])

输出描述:
利用给定的砝码可以称出的不同的重量数

示例1

输入:2
	1 2
	2 1
输出:5

题解

下面展示本人题解思路代码。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        let weight = await readline()
        weight = weight.split(' ').map(Number)
        let nums = await readline()
        nums = nums.split(' ').map(Number)
        let set = new Set([0])
        for(let i=0;i<line;i++){
            let arr=[...set]
            for(let j=1;j<=nums[i];j++){
                arr.forEach(item=>{
                    set.add(item+weight[i]*j)
                })
                
            }
        }
        console.log(set.size)
    }
}()

文章系原创,在阅读过程中如若有误,劳请指正;如若有妙解、疑惑也欢迎大家和我交流,感谢!

你可能感兴趣的:(快乐刷题每一天之华为机试103,javascript,算法,前端,node.js,开发语言)