猴子吃香蕉过河问题分析与扩展

第一次接触这个题目是大学找工作时候的一次笔试,题干意思是说有一座桥长50m,桥的一端放着一堆香蕉总共100根,还有一只猴子,这只猴子想要过桥,但是每走1m就要吃一根香蕉(每移动1m要吃一根香蕉,否则饿死,就是这么矫情),并且猴子身上最多可以放50根香蕉,再多就被压死了。问:猴子最多可以把多少根香蕉搬到桥的另一端?

乍一看觉得不太科学,觉得猴子搬不过去,搬过去数量为0,仔细考虑,猴子是可以往返搬运的。

可以分为2个阶段:

1:第一阶段是往返搬香蕉,尽可能多的把香蕉往前挪动,假设猴子先搬50根香蕉走x米,这时候身上剩下50-x根,考虑回去路上吃的,还需要x根,所以可以在x米处丢掉香蕉50-2x根,然后返回,刚好走回去,再带50根,往前走,走到x米处又消耗x根,这时候需要一个条件,走到x米处要保证此时x米处所有香蕉数量不超过((50-x) + (50 - 2x) <= 50), 即(x >= 50 / 3)这样才能进入第二阶段,也就是带着所有的不超过50根的香蕉一口气走到桥尾。

2:第二阶段是把在x米处的香蕉数量一口气运送到桥尾,期间消耗香蕉数为50-x个,到桥尾的时候剩余数量可得为(50-x) + (50 - 2x)  - (50 - x)个,即 50 - 2x个,要让它最大,就得想最小,而x满足 x>= 50 / 3,x取17,最终结果50 - 2 * 17 = 16个。

不过这样有点无聊,像是纯数学不等式问题,可以加点难度变为编程问题,否则哪来的成就感,如果桥长为s米,初始香蕉总量为n根,猴子身上最多能放w根香蕉,每走1步就还是吃1根香蕉吧。

后续继续分析以及补上代码

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页