题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
package main
import "fmt"
//set 的实现方式参考了网上的众多资料,其中一位博客的文章我感觉写的非常简单易懂
//就利用这篇文章的内容来实现set了
//csdn:https://blog.csdn.net/HaoDaWang?type=blog
//文章名称:【golang】Go实现set类型
//解题思路也是参考其他用户的答案 自己用go实现了代码
type Empty struct{}
//创建set类
type MySet struct {
M map[int]Empty
}
func main() {
var n int
fmt.Scanln(&n)
mess := make([]int, n)
x := make([]int, n)
//读取mess
for i := 0; i < n; i++ {
var m int
fmt.Scan(&m)
mess[i] = m
}
//读取x
for i := 0; i < n; i++ {
var temp int
fmt.Scan(&temp)
x[i] = temp
}
//测试输入情况
//fmt.Println(n)
//fmt.Println(mess)
//fmt.Println(x)
//将所有元素装入切片
elements := []int{}
for i := 0; i < n; i++ {
for j := 0; j < x[i]; j++ {
elements = append(elements, mess[i])
}
}
//fmt.Println(elements)
//创建set
ms := map[int]Empty{}
ms[0] = Empty{}
for _, v := range elements {
preverse := map[int]Empty{}
//深度copy ***如果只是简单的等号“=”赋值,preverse会指向ms的地址,
//它会随着ms的改变而改变
for k := range ms {
preverse[k] = Empty{}
}
l := len(preverse)
//fmt.Println(v)
for k := range preverse {
val := k + v
ms[val] = Empty{}
//fmt.Println(val)
}
//fmt.Println("###")
}
fmt.Print(len(ms))
//fmt.Print(ms)
}
