抢数游戏及其演绎

来源:互联网 发布:centos ftp客户端 编辑:程序博客网 时间:2024/04/30 01:26

经典的抢数游戏,即:

两个人1开始轮流报数,每人每次可加1或2,谁先报到30,谁就胜利。

本来想自己写的,但是发现已经有人总结出来了:经典的抢数游戏

不过我还是把我们的思路说一下吧:

1. 基本方法

很显然,对于每次加1或者2,最终数到30来说,可以逆推:

甲想要数到30,则必须让乙只能数到28或29,则甲前一次应数到27;甲想要数到27,则必须让乙只能数到25或26,则甲前一次应数到24;……甲想要数到6,则必须让乙只能数到4或5,则甲前一次应数到3;甲想要数到3,则必须让乙只能数到1或2,即乙先报。

很明显,对于这题,后报数的人有必胜策略。

总结一下经验:
必胜策略中,必须要报到3,6,9,……,24,27才能报到30。

而这些关键数字都是(1 + 2 =)3 的倍数。这是不是个巧合呢?

2. 演绎一下

可以试着演绎一下,每次可加1,2,3,还是要数到30,试一试:

甲想要数到30,则必须让乙只能数到27、28或29,则甲前一次应数到26;甲想要数到26,则必须让乙只能数到23、24或25,则甲前一次应数到22;……甲想要数到6,则必须让乙只能数到3、4或5,则甲前一次应数到2;

很明显,对于这题,先报数的人有必胜策略。
显然,关键数字是:2,6,10,……,22,26,而(1 + 3 =)4并不是这些数的因子,看来真的只是个巧合?
不不不,君且安坐,听我一言:

仔细观察,所有关键数的差都是4!

那么,我们可以试着归纳一下:

为了方便,称可加的最小数字为 s, 最大数字是 t,其和 s + t = f,最终数字是end

则为了抢到最终的end,必胜策略就是抢先数到与end的差值为f的倍数的那些关键字。

3. 推广一下

现在有了这个归纳,可以试着推广一下。
现在令每次可加2或3,注意,这里可加的最小数不再是1,而是2,还是数到30:

s = 2t = 3f = s + t = 5则需要抢到 25, 20, 15, 10, 5.

后数者有必胜策略。

4. 终极必杀

那么,既然我们知道了这个策略,怎么能迅速判断出先数还是后数才能必胜呢?
很简单,再总结一下:

对于可加12,先数到3030 / (1+2) = 100, 后数必胜;对于可加123,先数到3030 / (1+3) = 72,  先数必胜;对于可加23,先数到3030 / (2+3) = 50,  后数必胜;# 为了对比,再加几个:对于可加123,先数到3327 / (1+3) = 63,  先数必胜;

可见:

对于最终数 end 是 (s + t =)f 的整数倍的情况,后报数有必胜策略,策略就是一直占据关键数,即与 end 的差值是 f 的整数倍的数字;
而对于最终数 end 不是(s + t =)f的整数倍的情况,先报数有必胜策略,策略就是先数到余数,这样下一次轮到自己的时候,就能占据关键数,即与 end 的差值是 f 的整数倍的数字。(这样看来,余数其实也可以看做关键数。)

简单测试一下:

oukohou:  hey man, 我们来玩数字游戏吧,每次可加234,谁先数到20谁赢;ccslience:yeah, why not.(同时心里暗算:2+4=620/6=32,恩我要先数),I begin first--2;oukohou:   5;ccslience:8;(key number)oukohou:  10;ccslience:14;(key number)oukohou:  16;ccslience:20。Victory!oukohou:  well, you really smart……ccslience:haha~~(同时心里决定给这篇博客点个大大的赞~)

这样,下次和小伙伴玩的时候,就能成竹在胸胜券在握镇定自若地决定自己是先数还是后数啦~

5. 版权所属

注意到开头的时候我写的是:

不过我还是把我们的思路说一下吧:

之所以说“我们”,这个抢数游戏,其实是国庆出去玩的时候,和我家ccslience一起玩抢数游戏的时候慢慢总结出来的。
真好。
hello there, ccslience.

与君相遇知何处,两叶浮萍大海中。

原创粉丝点击