题目是这样子的:一堆石子有N个,两个人轮流取石头,限制条件如下:
- 每个人一次只能取1~3个石头。
- 假设两人足够聪明(如果可以胜利,不会放水或者愚蠢的取石头)
胜负条件是最后取完石头的人算输(甲取完,石头正好没了,甲输),那么对于先取石头的人来说,怎么样的石头数量才能保证其一定赢得游戏,或者输掉游戏。
这道题目算是一个简单的博弈问题,分析问题的基础情况,记先取的人必赢为MW(Must Win),先取的人必输为ML(Must Lose):
- N=1:ML。
- N=2:MW(先取者只需取一个,即可获胜)。
- N=3 : MW (先取者只需取两个,即可获胜)。
- N=4:MW(先取者只需取三个,即可获胜)。
- N=5:ML(无论先取几个,实际上留下的石头数量都会使后取者到达必赢得位置上)。
- N=6:MW(先取者先取一个,使后取者被推到必输的位置上)
- ……
从上面的推理我们可以看出,博弈获胜的关键在于,N的数量决定了先取者是否能获胜,可以列出ML的时候,N=1,5,9,13.。。,即N满足N%4=1的时候,先取者必输,因为在这些点上,先取者无论用怎样的策略都会使对方进到必赢得位置上,那么如何来证明这个猜想的正确性呢?
在面试的时候,我们自然的先由以上简单的尝试来寻找规律,当总结出规律进行验证时,采用数学归纳法进行验证:
- 当N=1的时候,很明显ML。
- 假设当N%4=1的时候,ML成立。
当(N+4)%4=1的时候,有以下三种情况:先取一个,剩下N+3个石头不满足式子,后取者进入必赢模式;先取两个和先取三个同理可得。则所推公式正确性得证。
那么如果取1~K个石头,同样也可以得到关键公式为N%(k+1)=1;
考虑这类博弈问题的一个关键点就在于:1. 对于所有的MW模式,一定存在一个MW模式到ML模式的转换。
2. 对于所有的ML模式,对于所有的转换都是ML模式到MW模式。
把握好这两个特性,便可在面试遇到这类问题时比较思路清晰的分析问题了。