关于抢数字游戏的解法

抢数字游戏是小时候玩过的一个游戏,最近看到一个类似的问题,于是就想把这个游戏的解法记录下来。这个游戏我想玩过的人应该都知道,两个人轮流报数,规定了最多报几个数,然后目标就是要抢到某个数。其实这个问题的解法也很简单的,估计玩过的人大概大部分也都考虑过解法的。

下面还有一个变种,就是要让对方说那个数字,这个网上有可以玩的地方: http://www.davincicode.com.cn/
没玩过的可以去试试看哦。

规则在这里就不重复了(其实前面都输入过一遍的,结果一不小心全没了…… ),下面还是用例子来讲讲思路吧。假设要抢的数是23,每次最多报3个数。我要报到23,那么要让对方前一次报数的范围在20、21、22,而要让对方的范围在20、21、22,那么我就先要抢到19,要抢到19,就要让对方的范围在16、17、18,以此类推,就能找到规律了。这里的规律就是从23开始,每次减4的那个数都要抢到,就能赢了。

接下去推广一下,先假设几个变量:

p:要抢到的数;
q:每次最多报多少个数;
x(1)、x(2)、x(3)……x(n):每次要抢到的数的序列;

下面就是递归解:

x(1) = p mod (q + 1);
x(i) = x(i - 1) + (q + 1);          1 <= i <= n


有这个公式,就能计算出每次应该抢到的数字了。不过仔细推想可以发现,如果2个人都知道这个解法,那么获胜与否还与谁第一个报数有关,是先报数的能赢还是后报数的能赢,这个规律在于第一个式子。

如果 p mod (q + 1) = 0,即 x(1) = 0,那么后报数的就能赢;如果 x(1) != 0,那么先报数的就能赢。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值