0%

华为机试

题目

  1. 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
  2. 现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
    每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。

代码

  1. package main
    
    import "fmt"
    
    func main() {
        var num int
        for {
            n, _ := fmt.Scan(&num)
            if n == 0 || num == 0 {
                break
            }
            fmt.Println(drink(num))
        }
    }
    
    func drink(num int) (ans int) {
        return num / 2
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64

    2. ```go
    package main

    import (
    "fmt"
    )

    func main() {
    for {
    var n int
    nn, err := fmt.Scan(&n)
    if nn == 0 || err != nil {
    break
    }

    var nums []int
    for i := 0; i < n; i++ {
    var num int
    _, _ = fmt.Scan(&num)
    nums = append(nums, num)
    }

    var amount []int
    for i := 0; i < n; i++ {
    var num int
    _, _ = fmt.Scan(&num)
    amount = append(amount, num)
    }

    var weights []int
    for i := 0; i < n; i++ {
    for j := 0; j < amount[i]; j++ {
    weights = append(weights, nums[i])
    }
    }
    fmt.Println(cnt(weights))
    }
    }

    func cnt(weights []int) int {
    var set Set
    set = make(map[int]bool)
    set.add(0)
    for _, weight := range weights {
    var nums []int
    for k := range set {
    nums = append(nums, k+weight)
    }
    for _, v := range nums {
    set.add(v)
    }
    }
    return len(set)
    }

    type Set map[int]bool

    func (s Set) add(num int) {
    if _, ok := s[num]; !ok {
    s[num] = true
    }
    }