猜数字

维基百科,自由的百科全书
跳到导航 跳到搜索
猜数字
4digits, an Open Source version of Bulls and Cows.
4digits的运行画面
玩家数目 2人
复杂程度
所需技巧 分析

猜数字是一种益智游戏,游戏人数为两人,或一人与一个人工智能

玩法[编辑]

一个人设定一组四码的数字作为谜底,另一方猜。每猜一个数,出数者就要根据这个数字给出提示,提示以XAYB形式呈现,直到猜中为止。其中X表示位置正确的数的个数,而Y表示数字正确而位置不对的数的个数。

例如,当谜底为8123,而猜谜者猜1052时,出题者必须提示0A2B。

例如,当谜底为5637,而猜谜者猜4931时,出题者必须提示1A0B。

含重复数字的猜数字[编辑]

有一种使用范围比较狭窄的猜数字,是允许重复数字存在的猜数字,但由于其规则较复杂,故没有得到广泛的推广。其规则如下:

除了上面的规则外,如果有出现重复的数字,则重复的数字每个也只能算一次,且以最优的结果为准,

如正确答案为5543,猜的人猜5255,则在这里不能认为猜测的第一个5对正确答案第二个,根据最优结果为准的原理和每个数字只能有一次的规则,两个比较后应该为1A1B,第一个5位置正确,记为1A;猜测数字中的第三个5或第四个5和答案的第二个5匹配,只能记为1B。当然,如果有猜5267中的第一个5不能与答案中的第二个5匹配,因此只能记作1A0B。

解法[编辑]

对于第一种玩法而言,有以下的解法:

计算机解[编辑]

通常采用的计算机解是通过排除法,即遍历所有可能的数,将不符合要求的数剃掉。

下面是一个计算机处理的例子:

for (int i = 0; i < Array.Count; i++) 
{
    if (请求提示(Array[i]) == A)
        return Array[i];
}

这个代码采用C#的语法,其中Array表示所有可能的数字的集合。这个例子为了方便说明,结合了语言的描述。

这样的方法充分利用了计算机计算速度快的优势,使用穷举法,并不进行推理。数字越长猜测时间越长。

推理解[编辑]

计算机解是根据这种方法推广的。这种解法的中心思想是假设猜的这个数字是正确答案,即如果它为正确答案,那么这个数应该符合已经猜测的数及其结果。如已经有

1234 0A0B

那么下一步就不能猜含有1234中任一数字的数,因为如果正确答案含1234中任一数字;则出题者不会说1234是0A0B。

再假设如果出题者说 5678 是 0A1B 的话,则正确答案必须只包含5、6、7、8其中仅仅一个数字,且如果有5、6、7、8的话,5的位置必须不在(左边数起)第一个位置、6的位置必须不在(左边数起)第二个位置、7的位置必须不在(左边数起)第三个位置、8的位置必须不在(左边数起)第四个位置。

再假设如果出题者说 1357 是 1A0B 的话,则正确答案必须只包含1、3、5、7其中仅仅一个数字,且如果有1、3、5、7的话,1的位置必须在(左边数起)第一个位置、3的位置必须在(左边数起)第二个位置、5的位置必须在(左边数起)第三个位置、7的位置必须在(左边数起)第四个位置。

基于这个解法,根据个人思维风格和起始数字选择的不同,以及对出题者出数风格的猜测,经过一些计算机程式的大量模拟,猜到答案的平均次数大约为5.3次。显然地,如果运气够好,有机会可以在一次、两次猜到答案;运气不好之时,花费八次猜测才找到答案也不无可能。

使用这种解法需要考虑的时间很久,不是很适合人们使用;特别是在限时赛中,人们很难检视所有可能的候选答案,然后选择其中最佳者。事实上,有兴趣的数学研究者,提出一种证明方法,证明了四位数(数字不重复、零可以开头)的猜数字游戏,在最佳状况下,可以用至多七次的猜测找到对手的答案,而平均来说,只要花5.2131次的猜测来完成一次的游戏。[1][2]

代入解[编辑]

即在推理出不可能的数字后,将余下可能的数字依序带入。

参考资料[编辑]

  1. ^ Optimal algorithms for bulls and cows game.
  2. ^ http://www.cs.nccu.edu.tw/~chaolin/papers/science3203.pdf 刘昭麟. 数学、资讯科学与数字游戏, 科学月刊,第32卷第3期,第250到255页, 财团法人台北市科学出版事业基金会,2001.

其他[编辑]

著名的桌上游戏Master Mind(珠机妙算),就是这种游戏形式的实物道具版本,只是把所要猜的由数字改为颜色。

参看[编辑]

外部链接[编辑]