ZT-我在美国微软的魔鬼面试-我的“香蕉问题”答案

popnet 2009-07-24 08:41:23
实在是没办法,回复了3次都出现服务器问题,现在根本回复不了,但这个问题确实很有趣,感觉我的思路应该是对的,随性单独发个帖,欢迎大家拍砖。

原问题(引自蒋涛的“ZT-我在美国微软的魔鬼面试”):
今天这第一轮面试比我想象中简单。第二轮面试,印度人,都问些技术上面奇怪问题,比如说:总共有3000只香蕉,有一只骆驼每一次只能带1000只香蕉,每1公里吃1只香蕉,没有香蕉吃它是不肯走的,A-B 点距离1000公里,如果这个骆驼要从A点到B点有什么办法可以让更多的香蕉剩下来?如何做到?如何最有效率的运最多的香蕉到B点?我想了一下,拿了张纸分析了一下不论对错,就告诉了他我的思考过程。

我的答案是:833 耗时大概2~3分钟,有用笔纸

详细分析如下:
----------------------
1. 很显然每公里走过的路上都要吃掉最少一个香蕉的;最多的话3K个/公里,就是一次运一个走一公里。
2. 问题关键,要剩下最多的香蕉就是没公里路上吃掉最少的香蕉,这样也可以走得最远。
3. 显然前面存在X公里路肯定是每公里必须吃掉3个的(3K/1K);中间可能存在Y公里路是必须没公里吃掉2个的(此时剩下2K/1K);最后若还只剩下1K个香蕉时就只需要每公里吃掉1个了(1K/1K),设Z公里。

寻找最优方案:
--------------
1. 在走开始的X公里路时,要在剩2K个香蕉时改每公里消耗2个香蕉,也就是之前的1000/3=333余1,也就是走完前333公里时,剩2001个香蕉,334公里依然要消耗3个,剩1998个低于临界点,也就是X=334。
2. 显然334公里还没走完,也就开始走Y公里了,临界点是剩1000个香蕉,998/2=499余0,也就是Y=499.
3. 显然剩下1K个香蕉,一次性背齐路上消耗最少,也就是剩下的1000公里-X-Y=167公里,Z=167公里。
结果也就出来了。
剩下香蕉数量3000-334*3-499*2-167*1=833个
...全文
305 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
outou 2009-07-25
  • 打赏
  • 举报
回复
不错。
gonxi 2009-07-25
  • 打赏
  • 举报
回复
感觉是534
popnet 2009-07-24
  • 打赏
  • 举报
回复
不对 刚看别人的回复,剩1001根时,可以先吃掉这根然后走,剩467公里 1001-467=534根。
这个地方还真的绕得过弯来才行。
popnet 2009-07-24
  • 打赏
  • 举报
回复
不对,往返都要吃香蕉,X,Y,Z过程每公里消耗的个数应该是5,3,1
1000/5=200公里
1000/3=333公里 余1 共剩1001个香蕉
也就是334公里 剩下998个香蕉
余下1000-200-334=466公里,需消耗466*1个香蕉
998-466
答案是532?

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧