结论:当n为Fibonacci数时,先手必败。即存在先手的必败态当且仅当石头个数为Fibonacci数。 反之必胜。
为什么?
网上有些博客情况根本就没考虑全面。
网上一些花里胡哨的证明自己又看不懂,花了一个多小时的时间自己证明了一下。
1.我们先来证明如果这个数是斐波拉契数,那么先手就败的情况。
我们假设一个数为斐波拉契数,显然,它总可以分成两个连续的斐波拉契数之和。
比如 有21个石子 (21=13+8) 连续两个斐波拉契数13+8的和
首先有21个石子,我们肯定是不能让对手取最后一个石子的。(显而易见,不然这样我们就输了。)那么21可以划分成21=13+8这两个数之和,我们肯定不能取>=8的石子,因为这样后手一下子会取完,那么对于8这堆来说,我们也要不让对手取最后一颗石子,那么8又可以划分成8=5+3 连续斐波拉契数之和 ,那么我们肯定是不能取>=3的石子,因为那样后手一下子会取完,那么对于3这一堆来说,我们也不要让对手取最后一颗石子,那么3又可以划分为3=2+1连续的斐波拉契数之和.....
不知道大家有没有注意到,这慢慢的竟然变成了一个递归的情形!
那么我们递归到终点处看一下,继续刚才的内容,那么3又可以划分为3=2+1连续的斐波拉契数之和.,那么我们肯定不能取>=1的石子....
等等!!!!递归到这里,显而易见,和题目发生了冲突,我们不能取大于等于1的石头才能有获胜的可能,那么这样的话,可能吗?显然不可能啊。所以我用反证法可以证明斐波拉契数先手必败这个结论。
虽然用反证法证明了,可能大家心中会不服?凭什么我怎么取都是输?
那来举个例子吧。我们把数量弄小一点,假设是13个石子,聪明的你肯定会在5之内取 13=8+5=2+3+3+5;
假设你就取了1个, 聪明的对手就取了1个。(2)
假设你再取1个,聪明的对手取2个 (3)
你再取2个 那么聪明的对手取1个 (3)
你再取1个?我取1个 (2) 5=2+3
你再取一个试试?马上取2个让你gg。
我不服我悔棋我不要这样取!
行啊。再来。
假设你开头猛一点,取了4个!(显然不能取5个不然你就凉了) 聪明的对手取了1个。 13=5+3+3+2
这.....
那你取最多的,假设你取2个,那么聪明的对手取了1个。
这.... 5=3+2
你再取2个试试?马上取2个让你gg。
那假设你取1个,聪明的对手取了1个
最后还剩3个怎么取都是输。
2.我们再来证明如果这个数不是斐波拉契数,那么先手就赢的情况。
证明:根据“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。如n=83 = 55+21+5+2。
如果我们先手取掉最小的那堆2的话,那么对手怎么也不能把倒数第二堆取完,(因为它们不是连续的斐波拉契!)
那么就转化成了5个石头对手先取,5是斐波拉契数怎么取都是后手拿掉最后一个(这就转化成了第一种情况!)
同理21 55 你总能拿掉最后一颗。
所以证明完毕。
这样理解是不是很简单呢。