赞 | 27 |
VIP | 400 |
好人卡 | 13 |
积分 | 17 |
经验 | 69730 |
最后登录 | 2023-6-12 |
在线时间 | 3038 小时 |
Lv3.寻梦者 (暗夜天使) 精灵族の天使
- 梦石
- 0
- 星屑
- 1697
- 在线时间
- 3038 小时
- 注册时间
- 2007-3-16
- 帖子
- 33731
|
本帖最后由 精灵使者 于 2010-9-26 09:05 编辑
我使用替换法来猜……我简要的写个算法吧。
首先,直接输入1234和5678(这前两个为固定式),然后判断他们的情况。
于是出现了两种情况。
如果里面的A,B里面加在一起等于4
那么可以肯定9,0被排除在数字之外。
如果A,B加在一起小于四的话就麻烦了。说明了,9和0之间会有一个数字是正确的。
于是,我们就尽量靠近两个极端
一个是0A0B(这四个数字都不是答案数字,可以排除很多情况)(可以更换其中的一些数字来观察情况,从而判断是不是答案数字)
一个是A+B = 4(这样的话全部数字都是答案数字,排除其余数字的情况)
然后再使用确认不是答案数字的字符来计算其他的数字是不是答案数字。
判断的差不多了的情况下,然后再计算以前的结果判断四个正确数字的位置。
基本上能够在8次以内猜中。
为了能减少猜的次数,有效的数字可以在各位出现,以判断有效的数字的正确位置。
所以,可以化整为零,每一个数字都做一个数组
分别为(数字,有效度,位置)
数字:0-9
有效度:(0-2)(0:未知 ,1:无效,2:有效)
位置(0-4)只有有效度有效的时候才会判断位置。
那么,最后的结果是
A 1 1
B 1 2
C 1 3
D 1 4
于是正确答案是ABCD。
每次答案的结果反馈进去,会自动生成下一个新的数字,来进行猜测。
整个思路就是:先猜测能完成的数字的大致范围(1234,5678)
然后再调换数字同时调整排序,根据结果来计算出正确的数字集(这个时侯可以用2-3次,而且可以用已鉴定完成的数字去鉴定未完成的数字)
找到数字的大致范围以后,计算它的位置(通过前几次的统计结果,确认正确的数字位置,其中如果有正确的数字被判断B的话,那么在此位上就不能是这个数字。提出的数字不能和以前的计算结果相抵触。)这样,随着提示越来越多,你就应该能算出正确的数字了。 |
评分
-
查看全部评分
|