Processing math: 100%

Loading

Fibonacci Nim(斐波那契尼姆)游戏

游戏描述:

Fibonacci Nim是Nim游戏的变种,其规则为两名玩家从一堆硬币中交替移除硬币,第一步中,不允许玩家拿走所有硬币,也不允许不取,并且在每次后续移动中,移除的硬币数量最多可以是上一次移除数量的两倍,拿走最后一枚硬币的玩家获胜或者失败,如果判失败,只要第一个人取走n1个硬币就必胜

结论

如果双方足够聪明,只要开局硬币数量不是斐波那契数,那么当n为斐波那契数的时候先手必败(即后手必胜)

证明

如果硬币数量是斐波那契数,设该数为F(k+2),有F(k+2)=F(k+1)+F(k),可以将硬币看作两堆F(k+1)F(k),如果先手取走F(k)及以上,那么后手必胜,(毕竟F(k+1)<2F(k)),那么先手只能在F(k)的一堆中取硬币,就是上一个问题的子问题,那么后手也肯定能取走该堆最后一枚硬币,那么剩下的一堆硬币也可以如此拆分,那么如此先手必败。如果硬币数量不是斐波那契数,根据Zeckendorf定理(齐肯多夫定理),正整数都可以表示成若干个不连续的斐波那契数之和。那么我们可以将硬币数n表示为n=F(a1)+F(a2)+.....F(an),(a1>a2>.....a3),先手可以先取完最小的一堆,由于各个斐波那契数不连续,即有F(ai1)>2F(ai),后手肯定取不完剩下的最少的一堆硬币,此时相当于后手面对该游戏的必败态,对于以后的每一堆,先手都能取到这一堆的最后一枚硬币从而获胜

posted @   GrayKido  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
点击右上角即可分享
微信分享提示