题解 | #称砝码#

称砝码

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

package main

import (
    "fmt"
)

func main() {
    // 扫描元素的种类
    //抄的,写的注释
    var n int
    fmt.Scan(&n)
    var weights []int
    // 扫描一下所有的砝码
    for i:=0;i<n;i++{
        var tem int
        fmt.Scan(&tem)
        weights = append(weights, tem)
    }
    // 上面一个数组仅仅是砝码的类型
    // 下面要创建一个数组,将类型和出现的次数都写进去
    var all []int
    for i:=0;i<n;i++{
        // 扫描对应index的砝码出现的次数
        var times int
        fmt.Scan(×)
        // 出现几次我就将对应index的砝码扫进去几次
        for j:=0;j<times;j++{
            all = append(all, weights[i])
        }
    }
    //创建一个map记录砝码之和的结果,相同的结果(重量)会因为hash的特征被覆盖
    set:=map[int]struct{}{0:struct{}{}}
    // 记得初始化零总重的结果

    // 模拟称重
    for _,v:=range all{
        // 初始化tem,tem代表之前所有的称重的结果
        tem:=[]int{}
        for k,_:=range set{
            tem = append(tem, k)
        }
        // 给这些结果加上现在对应的重量
        for _,k:=range tem{
            // map的key不重复,利用这个特征可以过滤相同的总重
            set[k+v]=struct{}{}
        }
    }
    // 打印出长度
    fmt.Println(len(set))
}

全部评论

相关推荐

03-04 07:14
门头沟学院 C++
黑皮白袜臭脚体育生:老板:都给工作机会了还想要工资,哪来这么多好事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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