NYOJ 23题 取石子(一)

刚一看到这道题时,让我想起了“搬山游戏”,但是,拿过那道题一对照,规则明显不同。

对于这道题,关键是站到两个游戏者的角度思考,每个人都想赢,但是,如何才能赢呢?又引出了一个定理“巴什博弈”,即,你如果想打败对方,就要构造一种环境,这种环境就是 每次留给对手(m + 1)的倍数个石子,即(n % (m + 1) != 0),假设,一共20个,每次最多取8个,TT先取,取2个,余下18个,无论对手怎么取,TT总是先取完。(公式:n = (m + 1)r + s, r为任意自然数。)当然,如果,总数N小于M,TT很聪明,为了赢,会取走所有的石子。

“搬山游戏”的规则是,谁最后搬完,谁输。计算机为了赢,所以,1.当剩余山数目-1 <= 可移动的最大数目时,计算机 要搬(剩余山数 - 1)座,以便将最后一座山留给人;2.对于任意x,y,一定有 0 <= x % (y + 1) <= y.在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,计算机应搬山数满足:(n - 1)% (k + 1),如果结果为0,即整除无余数,则规定只搬一座山,以防止冒进后发生问题。

程序如下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值