猜数字
解密碼(又稱終極密碼)可以算是一种益智类小游戏,一般两个人玩,也可以由一个人和电脑玩,可以在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。
目录 |
玩法 [编辑]
这个游戏的玩法有兩種:
- 第一種:两个人玩,一方出数字,一方猜。出数字的人要先想好一个没有重复数字的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,猜中。
參考資料 [编辑]
- ^ Optimal algorithms for bulls and cows game.
- ^ http://www.cs.nccu.edu.tw/~chaolin/papers/science3203.pdf 劉昭麟. 數學、資訊科學與數字遊戲, 科學月刊,第32卷第3期,第250到255頁, 財團法人臺北市科學出版事業基金會,2001.
其他 [编辑]
著名的桌上遊戲Master Mind(珠機妙算),就是這種遊戲形式的實物道具版本,只是把所要猜的由數字改為顏色。
