Fibonacci Game

Fibonacci Game

1 1 2 3 5 8 13 21 34 55 89 144

題目描述:有一堆石子一共n個,兩人輪流取。(1)先手不能第一次把石子取完(2)之後的人取石子數量都要介於1~前面那個人取石子的兩倍。問先手贏還是後手贏。

證明必敗狀態:

i=2,先手只能取1顆,先手的必敗態。(i代表第i個Fibonacci數,f[i]代表第i個Fibonacci數的值,k也是同理)

假設i<=k成立,則i=k+1時,f[i]=f[k-1]+f[k],如13=5+8;

(1)如果先手取的值大於等於f[k-1],後手可以一次性將f[k]取完。因爲2*f[k-1]>f[k],如10>8;

(2)如果先手取少於f[k-1],由假設可預測後手總能取最後一顆。證明如下:如果先手取y,後手取x。設y>=f[k-1]/3,對於k-1這小堆,現在剩下的數量小於等於2*y,後手可以一次將所剩的取完。x=f[k-1]-y,x<=f[k-1]*2/3。那麼f[k-1]*2/3和f[k]/2的值誰大呢?也就是4*f[k-1]和3*f[k]的值哪個大?由例子可得20<24(其實可以用數學證明,水平有限,特殊值來驗證)也就是x<f[k]/2,後手取完第k-1堆後,先手不能取完f[k],由假設可得,對於第k堆,後手仍能取完最後一顆,後手必勝。

證畢,即對於任意的Fibonacci數,都是一個P態,即先手必敗。

證明必勝態:

如果n=85,即不是Fibonacci數,85=55+21+8+1。由Zeckendorf(齊肯多夫)定理知:任何非Fibonacci數總可以由有限多個Fibonacci數組成。n=f[a1]+f[a2]+f[a3]....+f[ap](a1>a2>a3...ap)。令先手將f[ap]取完,a(p-1)>ap+1,例:8>2。f[a(p-1)]>f[ap]*2,後手不能一次將a(p-1)這堆取完,即後手將面臨這個a(p-1)堆的子游戲,必敗態。後續的每一堆,先手可取該堆的最後一顆。即先手獲得最終的勝利。

證畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章