RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
用C++编的猜数字程序,由程序来猜
  • 作者:zhaozj
  • 发表时间:2020-12-23 11:02
  • 来源:未知

呵呵,上学期学的数据挖掘里面讲到关于信息量的方法,小试了一下: 猜数字游戏: ? 即有四位十进制数字,一般可猜8次 ? 每次返回aAbB(A表示数字正确并且位置正确,B表示数字正确但位置不正确) ? 如:假设要猜的数字是1234,如果游戏者猜0134即返回2A1B(3、4为A,1为B) 思路: ? 模拟人猜数字的过程,先构造一个集合包括所有可能的数字(10*9*8*7=5040种),先乱猜一个,根据返回xAxB来把原来集合里面的不符合的都删掉,然后根据选取下一个。选下一个的原则是:选最能区分剩下的集合的那个数,即:被选择的那个数得到的返回值为xAxB中任意一种的概率差不多。 ? 我使用信息量的方法,即: ?? 对集合set(size个)中每一个数字n,用n的每一种返回值(从0a0b到4a0b,共有15种)做删减,看各剩下多少个,用pi表示第i种返回值得情况,然后根据信息量公式:info(n) = ∑(pi/size) * log(pi/size)计算,然后取max(info(i)) i=0..size;最大的那个info(n)对应的数字就是被选择的数字。 http://www.blogbus.com/blogbus/blog/userfiles/16192/1089196646.rar 压缩包中包括源码和经过VC6.0编译生成的可执行文件 GuessNumGame.dsw:简易的猜数字游戏 GuessNum.dsw:由计算机来猜数字,基本上6-7次就可以了 GuessNumAll.cpp:尚未编好,打算用来使用决策树方法猜数字,并可以算出对所有的数最多需要多少次 思路简单,但是计算起来很慢,做成Release版还勉强可以忍受有没有其他方法比较快啊?