经典面试题【蚂蚁过杆】Golang 代码详解
面试题库【蚂蚁过杆】一、常见题目
有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
求全部下杆最短时间?
答案: 11
求全部下杆最长时间?
答案: 24
二、详细思路
1.已知条件
从题目中我们得到已知的条件是:
- 27厘米长。
- 第3厘米、7厘米、11厘米、17厘米、23厘米。
- 只能通过一只蚂蚁。
- 碰头时,两只蚂蚁会朝反方向走
转换思维
蚂蚁碰头后掉头,可以当作蚂蚁穿过对方,即蚂蚁碰头不损耗时间。
也就是说若 1 2 相遇,则将转头后的 2 视作 1 ,转头后的 1 视作 2.
由于求的是所有蚂蚁的最短最长,不影响蚂蚁之间的编号交换。
时间也就是算出每一只蚂蚁从初始位置直接到离开木杆的场景。
ganLength := 27 //杆的长度
position := [5]int{3, 7, 11, 17, 23} //蚂蚁初始位置
speed := 1 //蚂蚁的速度
maxTime := 0 //最长时间
minTime := 0 //最短时间
2.详细代码
以木杆中心为基准,左边的蚂蚁往左走,右边的蚂蚁往右走,此时即为最短时间。
以木杆中心为基准,左边的蚂蚁往右走,右边的蚂蚁往左走,此时即为最长时间。
package main
import "fmt"
func main() {
ganLength := 27 //杆的长度
position := [5]int{3, 7, 11, 17, 23} //蚂蚁初始位置
speed := 1 //蚂蚁的速度
maxTime := 0 //最长时间
minTime := 0 //最短时间
for _, v := range position {
tempMax := 0 //最长时间
tempMin := 0 //最短时间
if v < ganLength/2 { //中点左边
tempMax = (ganLength - v) / speed
tempMin = v / speed
} else { //中点右边
tempMax = v / speed
tempMin = (ganLength - v) / speed
}
// 如果存在更晚的下杆时间,那么全部下杆的最长时间变成最新的值
if maxTime < tempMax {
maxTime = tempMax
}
// 如果存在更晚的下杆时间,那么全部下杆的最短时间变成最新的值
if minTime < tempMin {
minTime = tempMin
}
}
fmt.Println(minTime, maxTime)
}
三、结果
完成,实现简单的智力逻辑题的解析
总结
蚂蚁过杆是一道经典算法面试题,我们可以通过代码来更清晰的了解其中的逻辑,改变我们的思维。
希望这个博客能对你有所益处。我是轻王,我为自己代言。