猜数游戏算法代码

时间:2022-05-19 15:55:24 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
1 2005-06-08, 15:13 【讨论】一个有趣的小游戏

--------------------------------------------------------------------------------

文曲星上的经典猜数游戏,电脑随机出一个四位数(没有重复数字)让你来猜,每次你说出猜的数后,返回信息告诉你有几个数位置对了数字也对了,有几个数数字对了但位置不对。比方说原数是5678,你猜了一个3658,那么返回2A 1B,表示有两个数(68)位置和数字都对了,还有一个数(5)对了但位置不对。当最后返回4A 0B时表示你猜中了这个数。

在我们学校的BBS上有这个,做成了一个赌博游戏1次猜出赢100倍,2次猜出赢50倍,3次赢20倍,4次赢5倍,5次赢3倍,6次不输不赢,6次以上的就会把押的钱输掉。我ACM队里的闲着没事在研究怎么写一个程序帮人来猜数,能挣到更多的钱。

我的初步想法是第一次猜0123,然后根据返回值,去掉不符合条件的数,再在所有符合条件的数里面猜最小的,直到猜出来为止。后来做了一些改进,不是在所有符合条件的数里猜最小的,而是把所有可猜的数都试一遍,看猜哪个数时能去掉更多的数,就选这个数来猜,算法慢了一些 O(N^2) ,但结果更好了一些。

下面我的程序的统计结果:(四位不重复的数共5040个)

1 1 2 13 3 108 4 619 5 2004 6 1932 7 360 8 3

失败的概率是0.07,平均期望大概是2.6左右,也就是说用这个程序去玩,能赢回2.6倍的钱。

还有一位也写了一个程序(算法我记不太清了),结果是:

1 1 2 4 3 44 4 459 5 2375 6 2048 7 108 8 1

这个算法虽然失败概率很低,只有0.02,但大部分的数都集中在6上,平均期望只有2.0右。




请大家可以想想还有没有更好的办法,我听说有人用哈夫曼树可以保证在6步之内猜到,知道是怎么做的。


本文来源:https://www.wddqw.com/doc/83d846c06529647d2628521b.html