设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: DeathKing
打印 上一主题 下一主题

[胡扯] 蛋疼数学程序帝!猜数字解法

 关闭 [复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

11
发表于 2010-9-26 08:27:58 | 只看该作者
本帖最后由 精灵使者 于 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的话,那么在此位上就不能是这个数字。提出的数字不能和以前的计算结果相抵触。)这样,随着提示越来越多,你就应该能算出正确的数字了。

点评

对,人工做题的时候的确不错,不过用于计算机来说,记录这些状态并继续进行有点麻烦。  发表于 2010-10-5 12:53

评分

参与人数 1星屑 +240 收起 理由
DeathKing + 240 很棒的主意

查看全部评分

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
帖子
573
12
发表于 2010-9-28 17:53:53 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-1 15:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表