好多鱼

好多鱼!

http://www.nowcoder.com/questionTerminal/e3dd485dd23a42899228305658457927

Go语言题解来一个

Go 里面的隐式类型转换跟C++不一样要特别注意一下


比如

C++

int tmp = 22;
ceil(tmp/10.0) => 3

Go

var tmp int = 22
math.Ceil(tmp/10.0) => 2

为什么呢?

c++中 tmp / 10.0 的类型是 double, 进行了隐式转换
而 golang 中 tmp / 10.0 的类型是 int
因为go中的类型转换机制不一样 tmp 是确定的 int 类型, 而 10.0 在go中是不确定的类型常量,
所以 tmp / 10.0 被转换为了确定的类型 即 int
因此 手写了 一个 ceil

思路

刚开始想复杂了 其实没想的那么复杂
直接把原来在的鱼 , 可能吃的鱼的种类和可能被吃的种类全部标记上就行了,
剩下就再遍历一遍就好了, 为什么因为后加入的鱼之前不会互相吃, 原来的鱼之间也不会互相吃

package main

import (
    "fmt"
)

func main() {
    var minSize, maxSize, n, tmp int
    var rangeSize [1001]int
    _, _ = fmt.Scanf("%d %d", &minSize, &maxSize)
    _, _ = fmt.Scanf("%d", &n)
    for i := 1; i <= n; i++ {
        _, _ = fmt.Scanf("%d", &tmp)
        for j := 2 * tmp; j <= maxSize && j <= 10*tmp; j++ {
            rangeSize[j] = 1
        }
        for j := tmp / 2; j >= minSize && j >= ceilDec(tmp, 10); j-- {
            rangeSize[j] = 1
        }
    }
    tmp = 0
    for i := minSize; i <= maxSize; i++ {
        if rangeSize[i] == 0 {
            tmp++
        }
    }
    fmt.Print(tmp)
}

func ceilDec(num1, num2 int) int {
    if num1%num2 == 0 {
        return num1 / num2
    } else {
        return num1/num2 + 1
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务