猜数字游戏

电脑已经设定了一个由不重复数字组成的密码。仅凭A、B提示,您需要猜多少次才能猜中呢?

尝试次数: 0

这个游戏在解决什么问题

电脑从0~9中选出几个互不相同的数字排成密码,您输入同样位数的数字,得到的只有“几个A、几个B”的提示,不会告诉您具体哪一位错了。因此每一次提示都要当作一道小小的逻辑题来读。它的本质是排除法:在成千上万种可能的密码里,每个提示都能去掉“不可能产生这个提示”的那一批。运气好可以一次猜中,但只要留意每次猜测把候选范围缩小了多少,同样位数下尝试次数会明显减少。在华语地区,这类游戏常以“1A2B”的形式玩,国际上一般称作Bulls and Cows;本页的提示用A、B表示,下文会解释含义。

如何读懂提示

本工具中密码与每次猜测都必须是互不相同的数字,0~9中任何数字都可以放在首位(像0123这样的密码也存在)。位数不对、数字重复,或包含半角0~9以外的字符(例如全角数字),都只会显示错误提示,不计入尝试次数。使用中文输入法时请切换到半角数字再输入。

组合数量表

从10个数字里取n个互不相同的数字按顺序排列,总数为10×9×8×……(共n项相乘)。一次猜测能得到的提示种类,等于满足A+B不超过n的(A,B)组合数,再减去不可能出现的“A=n-1且B=1”这一种。下表在生成页面时直接计算。

位数可能的密码总数可能出现的提示种类
3位数720种9种
4位数5,040种14种
5位数30,240种20种

一次猜测携带的信息量不会超过提示种类的数量。4位数时,5,040种密码一次最多只能分成14组;三次猜测最多区分 14×14×14=2,744 种提示序列,小于5,040,所以任何方法都不能保证三次内必定猜中。一两次就猜中只能靠运气。

第一次猜测如何分割候选

4位数时若第一次猜0123,下表是对5,040种密码逐一计算后,每种提示对应的密码个数。

得到的提示剩余候选数占比
0A1B1,44028.6%
0A2B1,26025.0%
1A1B72014.3%
1A0B4809.5%
全不中(0A0B)3607.1%
0A3B2645.2%
1A2B2164.3%
2A0B1803.6%
2A1B721.4%
3A0B240.5%
0A4B90.2%
1A3B80.2%
2A2B60.1%
4A0B10.0%

最常见的提示占全部密码的四分之一以上,而4A0B(猜中)在5,040种里只有1种。剩余候选多的提示说明这次“运气不佳”,像1A3B、2A2B这样少见的提示则能大幅缩小范围。表中没有3A1B,正是因为它不可能出现。

解题思路

  1. 前两三次先找出密码包含哪些数字。用重叠很少的数字组合猜测,汇总A+B。例如0123的合计为2、4567的合计为1,那么剩下的那1个数字必然在8或9之中。
  2. 之后只猜与所有已有提示都不矛盾的密码。这样每一次都有可能直接猜中,即使没中,候选也一定在减少。打开上方的“显示剩余候选数”,可以看到每次猜测缩小了多少。
  3. 通过对调位置确认每个数字的位置。比较两次只对调了两个数字的猜测,A的变化就能说明这两个位置的情况。
  4. 出现0A0B就把这些数字全部划掉。这是信息量最大的结果之一。

简单方法平均需要几次

为了有个参照,对每一个可能的密码都运行了一种很朴素的策略:每次都猜“与已有提示不矛盾的数字最小的那个密码”。3位和4位数是全部密码,5位数因计算量按每10个取1个(3,024种)抽样。

位数平均次数最多用到的次数
3位数约5.27次9次
4位数约5.56次9次
5位数(抽样)约6.01次9次

这只是该简单策略的测量值,并不是最优策略的平均次数。选择更能均匀分割候选的猜法可能做得更好,但最优值未在本页核实,所以不写出。

验算示例

示例1:提示怎么算。 密码是1234,猜1243:1和2位置也对,是2个A;4和3数字对但位置互换,是2个B,即2A2B。猜4321则四个数字都在密码里却一个位置都不对,为0A4B。猜5678没有任何重合,为0A0B。

示例2:4位数密码8051。 用上述朴素策略,第7次猜中。

次数猜测提示猜测前候选数
101230A2B5040
210451A2B1260
312541A1B72
414060A2B25
550341A1B4
670513A0B3
780514A0B2

第一个提示0A2B就把5,040种缩到1,260种,第三次之后只剩几十种。最后几步较慢,是因为剩下的候选只有一处不同。

示例3:3位数密码729。 同样的策略依次猜012(0A1B)→134(0A0B)→256(0A1B)→507(0A1B)→680(0A0B)→729,共6次。候选数依次为720→252→80→24→6→1。两次0A0B让用过的数字被成批排除,效果最明显。

常见误区与局限

如何利用结果

结束后从第一次猜测开始向下看记录,想一想每次猜测究竟去掉了多少候选。几乎没有缩小范围的猜测,多半是在重复已知信息。能稳定在5次左右解出3位数后,再挑战4位数,最后是5位数,这是自然的进阶顺序。

常见问题

可以输入重复的数字吗?

不可以。猜测也必须由互不相同的数字组成,输入重复数字会提示错误,且不增加尝试次数。

首位可以是0吗?

可以。密码是把0~9打乱后取前n个得到的,所以0123这样的密码也会出现。因此3位数的总数是10×9×8=720种。

4位数时为什么不会出现3A1B?

如果有三位数字位置完全正确,密码中只剩一个位置未定。您输入的最后一个数字如果在密码里,就必然在那个位置,成为A;如果不在密码里就没有提示。没有可以成为B的位置,所以3A1B不可能出现。

为什么区分A和B?

A表示数字和位置都对,B表示数字对但位置不对,这是这类游戏通行的记法,国际上称作Bulls and Cows(公牛与母牛)。具体由来各资料说法不一,本页不作断定。

几次猜中算厉害?

上面的朴素策略在4位数时平均约5.6次,可作为参照。单局结果受运气和第一次猜测影响很大,建议看多局的平均而不是一局。

相关的推理与对战游戏

想用字母来推理,可以玩英语猜单词游戏;想与电脑对战,可以试试五子棋和井字棋;喜欢独自推理的话,还有数独游戏。