解猜数字游戏的程序

 电脑采用最擅长的穷举法来猜测,即:第一次,固定猜   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各猜一次,统计其中的最大步数和相应记录即可。   
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值