题解 | #称砝码#
称砝码
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))
}

查看3道真题和解析

