抢数字游戏是小时候玩过的一个游戏,最近看到一个类似的问题,于是就想把这个游戏的解法记录下来。这个游戏我想玩过的人应该都知道,两个人轮流报数,规定了最多报几个数,然后目标就是要抢到某个数。其实这个问题的解法也很简单的,估计玩过的人大概大部分也都考虑过解法的。
下面还有一个变种,就是要让对方说那个数字,这个网上有可以玩的地方: 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,那么先报数的就能赢。
下面还有一个变种,就是要让对方说那个数字,这个网上有可以玩的地方: http://www.davincicode.com.cn/
没玩过的可以去试试看哦。

规则在这里就不重复了(其实前面都输入过一遍的,结果一不小心全没了……

接下去推广一下,先假设几个变量:
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,那么先报数的就能赢。