这个问题是在编程爱好者论坛上看到的,不过原题叙述得不太清楚。我将它改动了一下:
有n个桃子,两只猴子一大一小。两只猴子轮流取走桃子,规定每只猴子每次只能取1~3个,且小猴先取。最后手中桃子数为偶数者为胜方。问题是给定一正整数n,小猴有没有必胜的策略。
其实问题的解决方法十分简单。假设n很小,小到什么程度?先让它等于1试试吗,显示小猴不可能胜,因为它最少也要取走一个,同时也就结束了。n比较小的时候,结果是显而易见的:
n | 小猴能否必胜 |
1 | 否 |
2 | 能 |
3 | 能 |
4 | 能 |
对于n=4的情况比较特殊,此时小猴如果取三个,那么接下来的大猴只能面对一个桃子,而n=1时又是败局,所以n=4时就认为小猴能必胜。
接下去就好理解了,当n=5时,小猴无论怎样取,接下来大猴面对的都是有必胜策略的情况,因此这时小猴无法必胜。如此递推下去,可以得出:当且仅当n mod 4=1时,小猴无必胜策略。