百度面试题--5只蚂蚁走木棍问题的非递归解法(Java调试通过)

本文介绍了百度面试题中5只蚂蚁走木棍问题的非递归解法,详细解析了最小和最大时间的计算,并提供了Java程序实现。文章通过创建蚂蚁类和Controller类来模拟蚂蚁移动,利用二进制表示蚂蚁的初始方向,最后通过Simulator类求解所有可能的方向组合,找出最短和最长离开木杆的时间。

致歉:之前贴的代码有bug。

题目描述:

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

当然,这道题目可以不用编程做,注意到“两只蚂蚁会同时调头朝反方向走”,也就是一秒钟两只蚂蚁完成调头和反方向爬行两个动作,可以理解为蚂蚁穿越了对方毫无影响地原方向前进(或者将两只蚂蚁互换来看待),那么

最大时间就取决于两头的蚂蚁的方向:

如果23厘米处的蚂蚁向原点爬行离开木杆,需用时23秒;如果3厘米处的蚂蚁向27厘米处爬行离开木杆,需用27-3=24秒,所以最大用时为24秒。

最小时间就取决于中间蚂蚁朝两头跑所用时间:

如果处于小于等于11厘米处的蚂蚁向原点爬行离开木杆,需用时11秒;如果大于11厘米处的蚂蚁向27厘米处爬行离开木杆,需用27-17=10秒,所以都爬出最小用时为11秒。

但如果面试官要求编写程序,那就老实编程吧,以下是一个Java编写的程序,以及编程思路。

思路与建模

  • 将木杆看成0至27的坐标, 5只蚂蚁分别在3, 7, 11, 17, 23的位置
  • 创建enum Direction{ Left, Right}
  • 创建Ant类, 蚂蚁可以爬行(walk), 掉头(shift),  以及记录是否已经爬出的标记.
  • 创建Controller类, 给定蚂蚁的初始方向, Controller类可以计算出在这种初始方向下蚂蚁全部爬
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值