一种NIM游戏的解析

来源:互联网 发布:nginx php cgi 编辑:程序博客网 时间:2024/06/09 17:14

题目:两个玩家,只有一堆石头,两人一次拿石头,最后那光者为赢家。取石头的规则是:

           1、第一个玩家不能拿光所有的石头。

            2、第一次拿石头之后,每人每次最多只能拿掉对方前一次所拿石头的两倍。

      那么,这个游戏有没有必胜的算法?(提示:好像和Fibonacci数列有关。)

 

分析:首先列出Fibonacci数列:1、1、2、3、5、8、13、21、34......

      假设从m块石头开始取,若不能取得胜利,那么m称作不安全状态。

      我们可以证明,Fibonacci数列中的数都是不安全状态。(从2开始,因为1块石头的游戏没法玩。)证明如下:

           证明:我们很明显可以看出,2、3都是不安全状态。

                因为5-3=2,所以从5开始取石头的话,先去者不可能先到达状态为3的状态(相当于不可能先

                 拿完2块石头,因为2是不安全状态),所以8也是不安全状态。依次往后推,即可得出结论:

                Fibonacci数列中的数都是不安全状态。证毕。

     Fibonacci数列有如下特点:1、F(n)>F(n-1).2、F(n)<2*F(n-1).3、F(n)=F(n-1)+F(n-2).

     以上Fibonacci数列的特点可以保证:若a=

 

解法:结合以上的分析,可以得出以下结论(假设刚开始石头总数为n,A先取,B后取):

          1、若n在Fibonacci数列当中,则A必败。因为B总可以先达到下一个不安全状态,进而给A制造了不安全状态。

           2、若n不再fibonacci数列当中,则A必胜。因为A每次可以先达到下一个不安全状态,进而给B制造了不安全状态。

 

注:假如F(n)

          

 

原创粉丝点击