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
}
} 
京公网安备 11010502036488号