猜数字

维基百科,自由的百科全书
跳转至: 导航搜索
猜數字
4digits, an Open Source version of Bulls and Cows.
4digits的運行畫面
玩家數目 幾A幾B型:2人
數字區間型:至少2人
複雜程度
策略成分
運氣成分
所需技巧 觀察、分析

解密碼(又稱終極密碼)可以算是一种益智类小游戏,一般两个人玩,也可以由一个人和电脑玩,可以在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。

玩法[编辑]

这个游戏的玩法有兩種:

  • 第一種:两个人玩,一方出数字,一方猜。出数字的人要先想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。

接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。

  • 第二種:兩個人玩,一方出數字,一方猜。出數字的人要想好一個指定位數的數,數字可重複,不能讓猜的人知道。猜的人就可以開始猜。每猜一個數,出數者就要說大過或小過出的數。

次数限制[编辑]

有的时候,这个游戏有猜测次数上的限制。根据计算机测算,这个游戏,如果以第一種玩法為例,根據最严谨的计算,任何数字可以在7次之内猜出。而有些地方把次数限制为6次或更少,则会导致有些数可能猜不出来。而有些地方考虑到人的逻辑思维难以达到计算机的那么严谨,故设置为8次甚至10次。也有的没有次数上的限制。

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

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

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

如正确答案为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]與當前輸出數字的比較 != 用戶輸入的與正確答案對比的結果) { Array.Remove(i); i--; } }

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

这样的方法充分利用了计算机计算速度快的优势,迅速排出不符合要求的数。通常第一次猜测的时间(有的引擎为第二次猜测)会在10秒左右,而随着猜测次数的不断增加,猜测的时间会越来越短,最后几乎不需要时间,这是由于集合中的数越来越少,排除需要的时间也随之减少。

推理解[编辑]

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

1234 0A0B

那么下一步就不能猜含有1234中任一数字的数,因为如果正确答案含1234中任一數字;則出題者不會說1234是0A0B。

再假設如果出題者說 5678 是 0A1B 的話,則正確答案必須只包含5、6、7、8其中僅僅一個數字,且如果有5、6、7、8的話,5的位置必須不在(左邊數起)第一個位置、6的位置必須不在(左邊數起)第二個位置、7的位置必須不在(左邊數起)第三個位置、8的位置必須不在(左邊數起)第四個位置。

基于这个解法,根据个人思维风格和起始数字选择的不同,以及对出题者出数风格的猜测,經過一些計算機程式的大量模擬,猜到答案的平均次數大約為5.3次。顯然地,如果運氣夠好,我們總是有機會可以在一次、兩次猜到答案;運氣不好之時,花費八次猜測才找到答案也不無可能。

使用这种解法需要考虑的时间很久,不是很適合人們使用;特別是在限時賽中,人們很難檢視所有可能的候選答案,然後選擇其中最佳者。事實上,有興趣的數學研究者,提出一種證明方法,證明了四位數(數字不重複、零可以開頭)的猜數字遊戲,在最佳狀況下,可以用至多七次的猜測找到對手的答案,而平均來說,只要花5.2131次的猜測來完成一次的遊戲。[1][2]

代入解[编辑]

还有一种方法,在人的猜测中很常用,即将推理出不可能含有的数字,代入,察看那些数字是有的。

但这种方法其猜测次数难以确定,且通常的猜测次数比推理解多。

其他[编辑]

可能还有其他的方法。

解法(第二種玩法)[编辑]

對於第二種玩法,有以下的解法:

嘗試法[编辑]

例如:原來的數是35,我猜48,他說大了,那麼猜47,直到猜中為止。

這個方法雖然在無次數限制中必定會猜中,但如果有次數限制就很難會在有限次數中猜中。

二分法[编辑]

例如:原來的數是8,我猜5(5x2=10),他說小了,那麼猜5+3(5/2=2.5)=8,猜中。

冪法[编辑]

例如:原來的數是5,我猜8,他說大了,那麼猜8-8/2=4,他說小了,那麼猜4+4/2=6,他說大了,那麼猜6-2/2=5,猜中。

參考資料[编辑]

  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(珠機妙算),就是這種遊戲形式的實物道具版本,只是把所要猜的由數字改為顏色。

参看[编辑]

外部連結[编辑]