用C++编的猜数字程序,由程序来猜

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

呵呵,上学期学的数据挖掘里面讲到关于信息量的方法,小试了一下:

猜数字游戏:

? 即有四位十进制数字,一般可猜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版还勉强可以忍受有没有其他方法比较快啊?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航