经典面试题【蚂蚁过杆】Golang 代码详解

经典面试题【蚂蚁过杆】Golang 代码详解

面试题库【蚂蚁过杆】


一、常见题目

有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。

求全部下杆最短时间?

答案: 11

求全部下杆最长时间?

答案: 24

二、详细思路

1.已知条件

从题目中我们得到已知的条件是:

  1. 27厘米长。
  2. 第3厘米、7厘米、11厘米、17厘米、23厘米。
  3. 只能通过一只蚂蚁。
  4. 碰头时,两只蚂蚁会朝反方向走

转换思维

蚂蚁碰头后掉头,可以当作蚂蚁穿过对方,即蚂蚁碰头不损耗时间。
也就是说若 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)
}


三、结果

完成,实现简单的智力逻辑题的解析
在这里插入图片描述


总结

蚂蚁过杆是一道经典算法面试题,我们可以通过代码来更清晰的了解其中的逻辑,改变我们的思维。

希望这个博客能对你有所益处。我是轻王,我为自己代言。

猜你喜欢

转载自blog.csdn.net/moer0/article/details/123327077