匿名用户
1级
2009-03-13 回答
我看到上面都没有给出一个解法,我写了很多,希望你能认真看看,再评价一下.
这个我有研究过,所以很有兴趣写一下:
假设要猜的是6281(用实例来说,随便取,方法是不依赖数字)
第一步:
1234 显示 1A1B
第二步:
3456 显示 0A1B
第三步:
5678 显示 0A2B
第四步:
7890 显示 0A1B
(前四步为固定填法)
第五六步前的准备:
笔算:分成12,34,56,78,90五组进行推理的,求出哪几组有的待求的数字.
从第一步开始,1234,有2个数字(A和B的和),
先假设12没有,则34有两个,根据第二步,出现了矛盾,因为34有两个,但第二步显示只有1个.
假设12有一个,则34有一个,则56没有,78有两个,到第四步,又出现了矛盾,显示只有1个,根据推理,应该有2个
假设12有两个,则34没有,则56有一个,78有一个,没有出现矛盾
结论:即12有两个,56有一个,78有一个若没有出现矛盾,可以认为是对的(假如出现两种假设都没有矛盾的话,增加一个测试9012,则必可以排除,但这又增加了一步,后面的就紧了,所以说我的方法,有缺陷,但能解决大部分问题)
这一步要会出现其他情况,在末尾再说.
第五步:
测试数据1,2,5,0,选0,因为0不可能出现
1,2是确定有的,把它们填在之前没有填过的位置上,如1不要填在第一位,2不要填在第二位
5是待测试的,也不要填在第一位和第三位.
测试:
2105 显示 0A2B
即可以肯定6是有的
第六步:
测试数据1,2,6,7
确定的是1,2,6, 不确定的是 7
同样,数据填在未填过的位置上.
测试:
6712 显示 1A2B
即肯定是1,2,6,8
第七步前的准备:
最后再笔算一下,情况好的话,不需要第7步:
然后写一个矩阵的样子:
1 1 1 1
2 2 2 2
6 6 6 6
8 8 8 8
第几列表示第几位可以填的数字,如第一位可以填1,2,6,8
以下利用前六步结果排除:
7.1.先找出全是A的结果,比如确定1是第一位,则可以把第一列的2,6,8擦去,把第二三四列的1擦去
7.2 但这个例子没有全是A的结果,只好找全是B的了.
7.2.1找到3456 显示 0A1B
故6不可能出现在第4列
划掉:
1 1 1 1
2 2 2 2
6 6 6 x
8 8 8 8
7.2.2再找到 5678 显示 0A2B
故6不可能出现第2列,8不可能出现第4列也擦去
1 1 1 1
2 2 2 2
6 x 6 x
8 8 8 x
7.2.3继续找到7890 显示 0A1B
故8也不能出现在第2列
擦去
1 1 1 1
2 2 2 2
6 x 6 x
8 x 8 x
7.2.4还有最后一个纯净的2105 显示 0A2B
故也擦去第一列的2和第二列的1
1 x 1 1
x 2 2 2
6 x 6 x
8 x 8 x
7.3(然后可以简化一下矩阵,即使不简化也没有所谓,即某一列只剩一个数字,可以把这行的同样数字删去)
x x x 1
x 2 x x
6 x 6 x
8 x 8 x
7.4现在根据上面的矩阵枚举情况了(不允许重复数字)
6281
8261
这次就拿出含有A结果来测试
第一步结果:1234 显示 1A1B
把6182当成真正结果来和1234比对,吻合,有1个A
把8261测试,也吻合
还有一个结果没有用
6712 显示 1A2B
6281测试,也吻合
8261测试,应该有一个1A,但一个没有,不吻合
故最后结果为6281.
第七步:
若还不能判断
则再测试一个,同样,已经填的位置不要填.
最后总结一下;
第四步后的推理,很重要.
通常出现三种情况
1.4个数字分别分散在4个分组中
2.2个数字分散在2个分组中,2个数字在同一分组中(上述例子是这种情况)
3.2个数字在一个组,另外2个数字在另一个组
绝大多数出现第2,3种情况,最好做,一般可以6步解决.
上述解法可以用于第2,3种情况.
下面补充说第1种情况
第1种,有可能弄到要第7步,不过老实说,出现这种情况的概率很小,我估计只有1.58%,
第五步和第六步有可能要调整
第五步,推荐做法,假设待猜为 7316,则经过前四步为12,34,56,78,各有一个数字
前两组各取一个数字,与确定不出现的数字(90)测试
如取1,3,9,0.
若命中两个数字,则确定为 1,3
若命中一个数字,未确定1还是3,
若命中0个数字,则确定为2,4
再取后两组各一个数字,与90测试
5,7,9,0
若命中两个数字,则确定为 5,7
若命中一个数字,未确定5还是7,
若命中0个数字,则确定为6,8
若两次都为确定情况,则可确定4个数字,可按上面第7步前的准备做
若有一次为不确定情况,则可再测试一次(第7次测试),
若两次均为不确定情况,这个,很麻烦,
则可枚举可能情况,按上面的
1.假设是1, 则数字为1,4
假设是3, 则数字为3,2
2.假设是5, 则数字为5,8
假设是7, 则数字为7,6
一共有4种情况
1458
1476
3258
3276
这个,很少见,因为这个概率很小,真的,估计不到1%.
先看看能不能用前面测试的结果(只能拿全为A的或者全为B的排除,就是假设这个是对,拿去比照),若可以,则排除
若还是不行.可以测试1,4,5,8若中4个,或若中0个,则也可以确定4个数字
若中两个,赌一把吧,但这个概率,我估计只有0.79%.
其实最重要弄清楚4个数字是什么,则可以按第七步的准备的方法来排除
推荐不要把相同的数字填在相同的位置两次以上,这是为第七步前的排除做好准备的.
我写这个,当然不是好方法,只为交流一下,更希望高手能有一般方法,毕竟在允许试7次的条件下,我的方法还是有一点不能确定的可能.
若有什么不明白的地方,欢迎交流.