好多鱼
好多鱼!
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 } }