ZT-我在美国微软的魔鬼面试-我的“香蕉问题”答案
实在是没办法,回复了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个