今天面试被问到了一个问题,有100个苹果,两个人,然后每次都能拿1-5个。问怎么样才能保证自己拿到最后一个苹果。
当场我以为是个编程题,哈哈哈,链表模拟一下。结果发现是个智力题。在思考之后想到了从后往前,递归思想。只是没有说清楚。
挂了电话之后便总结一下,顺便做个记录。

思路
我要拿到最后一个苹果,那么我们就要分析,什么时候才能拿到最后一个苹果。一种情况就是对方拿完后只剩一个苹果,那我们就能赢了。那剩下两个呢,剩下三个呢。所以同样的思路,4、5都行。当然,这个剩余的苹果受对方取的影响。那我们如何才能保证对方取完后剩下苹果呢?肯定是大于5个,那具体是多少个呢?这还需要考虑我们能拿的数目,如果对方剩下的数目我们一次取不完,那就还有悬念,所以我们要做的是无论对方取多少个,剩下的我们都能取完。5:5的时候,6才是必须你死我活的解。(具体情况可以自己分析一下)。
思路已经清晰:剩下6个,对方取1个,我们取剩下的5个,对方取5个,我们取剩下的1个。中间情况肯定能完成。那7个呢。如果对方拿1个,就剩下了6个,就成了上面我们分析的情况,无论怎么取,对方都赢。好,只有当6个的时候,情况才能在我们的掌握之中。所以,我们只需要让最后剩下6个苹果,怎么剩下?我们就需要拿第94个苹果,就成了94个取最后一个的问题。逻辑同上,拿到第88个苹果,递归递归递归。拿到第10个苹果,拿到第4个苹果,好了。100%6=4。
答案出来了,如果你先手,先拿四个,然后之后每次拿都保证你两的和是6,这样就能保证最后剩6个苹果。
如果对方先拿,而且对方不知道这个方法,那就还有挽救的办法,想办法让过程中回到上述逻辑中的某个递归点就可以了,这样就又是你的主场了。
如果对方也能想出这个逻辑,那高手过招,一出手你就输了。

其实:这种你死我活的问题,涉及到最后一个的问题,都是倒推的思想,从最后一个的情况,慢慢回溯到开始,结果自然就出来了。

哈哈哈,最后很可爱地听说有些面试官叫这个聪明题。保佑自己上午的面试过了。