电脑采用最擅长的穷举法来猜测,即:第一次,固定猜 0123;然后,人必定给出一个提示?a?b(1)。然后,电脑从0124开始搜索,每次加1,并分别和0123相比较,当找到第一个与标准答案一样为?a?b的不重复数字串时,第二步便猜测它;如果对,则结束,如果不对,则人又会给出第二个提示?a?b(2),此时,我们从第二步猜的数的下一个开始继续搜索,当遇到第一个同时满足?a?b(1)和?a?b(2)的不重复数字串时,第三步便猜它;以次类推····
可见,越往后猜,候选答案需要满足的约束条件越多,即越有可能是标准答案。如:当猜到第7步还没猜中时,第8步猜测的候选答案必须同时满足前7次的猜测记录,因此,越往后,排除掉的越多,加速越快。当搜索到9876仍然没有找到正确答案时,则说明人的提示有误。
到这里,大家是否明白这种算法的原理?就是,电脑从0124开始,假设它是正确答案,那么它和0123相比得到的?a?b必然与标准答案和0123相比得到的?a?b相同;对于步数更多的情况,此原理依然满足,即我们所猜测的候选答案与之前猜测的数字串相比,得到的?a?b序列,必然与历史记录完全相同,否则便可排除。
此算法的优点:实现简单,时间空间复杂度都不高,而且可以保证猜测最多不超过9步,这一点在我的测试版中已经得到了证明,即:我们设一个循环,让标准答案从0123一直到9876各猜一次,统计其中的最大步数和相应记录即可。
解猜数字游戏的程序
最新推荐文章于 2024-08-09 16:47:53 发布