编程之美---蚂蚁爬杆

一根长27cm的木棍上,在5个点上有5只蚂蚁,蚂蚁在开始的时候朝任意方向出发,只能掉头或者往前走。让任意两只蚂蚁碰头时,它们同时掉头朝反方向走。假设蚂蚁的速度都是一秒一厘米,求蚂蚁都离开木棍的最短时间和最长时间。

蚂蚁相遇后掉头往反向走,可以看作蚂蚁相遇后,擦肩而过,相当于两只蚂蚁互换了各自的行程。所以把每只蚂蚁离自己较远的一端,和较近的一端计算出来,分别取最大值,就是最长时间和最短时间。

扩展问题 参考网址 http://blog.csdn.net/weichaohnu/article/details/8748138

1、第i个蚂蚁,什么时候走出木杆?

可以想象成每只蚂蚁背着一袋粮食,蚂蚁相遇后,相互交换自己的粮食,蚂蚁仍掉头。假设刚开始有m只蚂蚁往右走,n-m只蚂蚁往左走,则最后一定有m只蚂蚁从右边出来,n-m只蚂蚁从左边出来。且从右边出来的的m只蚂蚁一定是靠近最右边的m只蚂蚁。因此只要找到第i个蚂蚁背的粮食就可以了。如果第i<=m,那么只要找到最开始往右走的第i袋粮食即可。

2、如果蚂蚁在一个平面上运动,同样也是碰头后原路返回(这样和弹性碰撞不同,不能等同于两个蚂蚁交换继续前进),问蚂蚁如何走出平面?

3、蚂蚁一共会碰撞几次?

原文地址:https://www.cnblogs.com/wen-ge/p/4194167.html