100个苹果拿最后一个问题

今天面试被问到了一个问题,有100个苹果,两个人,然后每次都能拿1-5个。问怎么样才能保证自己拿到最后一个苹果。
当场我以为是个编程题,哈哈哈,链表模拟一下。结果发现是个智力题。在思考之后想到了从后往前,递归思想。只是没有说清楚。
挂了电话之后便总结一下,顺便做个记录。
思路
我要拿到最后一个苹果,那么我们就要分析,什么时候才能拿到最后一个苹果。首先是拿完后只剩一个苹果,那我们就能赢了。那开始剩下两个,对方拿了一个。不行,这样对方何不直接拿两个就赢了。所以同样的思路,2、3、4、5都不行,受对方取的影响。那剩下6个呢,对方取1个,我们取剩下的5个,对方取5个,我们取剩下的1个。中间情况肯定能完成。那7个呢。如果对方拿1个,就剩下了6个,就成了上面我们分析的情况,无论怎么取,对方都赢。好,思路已经清晰了,只有当6个的时候,情况才能在我们的掌握之中。所以,我们只需要让最后剩下6个苹果,那么怎么剩下,那么我们就要让我们拿第94个苹果,就成了94个取最后一个的问题。逻辑同上,拿到第88个苹果,递归递归递归。拿到第10个苹果,拿到第4个苹果,好了。100%6==4。
答案出来了,如果你先手,先拿四个,然后之后每次拿都保证你两的和是6,这样就能保证最后剩6个苹果。
如果对方先拿,而且对方不知道这个方法,那就还有挽救的办法,想办法让过程中回到上述逻辑中的某个递归点就可以了,这样就又是你的主场了。
如果对方也能想出这个逻辑,那高手过招,一出手你就输了。
可惜了,面试场上只想出了从后往前这个逻辑,递归子问题的思想,并没有说的这么通,反手就写上了博客勉励自己。

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

发布了22 篇原创文章 · 获赞 0 · 访问量 350

猜你喜欢

转载自blog.csdn.net/yanchenzhi/article/details/105095962