Nim理论初探——编程之美1.12

Nim Game是非常著名的游戏,它的变体也很多,在《编程之美》上也用了三章讲解它。 Wikipedia  上说的很详细,本文则是在对wiki上的内容阅读后的个人理解。
游戏概述:
有M堆石子,每堆石子的个数不一定相同,Bob和Alice交替取石子,只能在一堆石子上取,取的数目任意,但不能为0,也不能大于此堆石子的数目。获胜的判定有两种:一种是谁先把石子去完谁获胜,这种叫Normal Play;另一种是最最后把石子取完谁输,这种叫Misere Play。
假设有M堆石子,(H1,H2...HM),XOR(H1...HM) = X,我们的目标是将 (H1,H2...HM)变为(0,0...0),即XOR()=0,那么我们说任何XOR()=0的情
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fibonacci Nim是一个游戏,与Fibonacci数列有密切关系。根据引用\[1\]的描述,先手胜利的条件是硬币数量不是Fibonacci数。换句话说,必败态构成Fibonacci数列。如果硬币数量是Fibonacci数,那么后手必胜。这是因为先手只能在Fibonacci数列中的一堆中取硬币,而后手可以根据上一个问题的子问题的解决方案取走该堆最后一枚硬币,从而剩下的一堆硬币也可以如此拆分,使得先手必败。如果硬币数量不是Fibonacci数,根据Zeckendorf定理,可以将硬币数量表示为不连续的Fibonacci数之和。在这种情况下,先手可以先取完最小的一堆硬币,而后手无法取完剩下的最少的一堆硬币,从而面对必败态。因此,先手可以在每一堆中取到最后一枚硬币,从而获胜。\[2\]根据引用\[3\]中的代码,可以通过判断硬币数量是否是Fibonacci数来确定先手或后手的胜利。如果硬币数量是Fibonacci数,输出"Second win";如果不是,输出"First win"。 #### 引用[.reference_title] - *1* *3* [斐波那契博弈](https://blog.csdn.net/iteye_6233/article/details/82396581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Fibonacci Nim(斐波那契尼姆)游戏](https://blog.csdn.net/darren0424/article/details/101639021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值