猜数游戏的算法及如何计算最多需要的步骤

s_ongyu 2008-09-26 10:16:45
猜数游戏如下:
人随意想一个四位数,四位数两两不相同,首位可为0,由计算机猜。
猜的步骤如下:
计算机给出一个四位数,人来回答这计算机的四位数中,有多少个是数字猜对,且位置也猜对的,有多少个是数字猜对,但位置为未猜对的。多次重复此步骤,直至计算机猜对为止。
例如:人产生的四位数为:1234,计算机第一次猜2534,这时人应给出回答:有2个数字猜对了,且位置也对(3和4),有1个数字猜对了,但位置不对(2),简记为2A1B。(A表示数字对且位置对,B表示数字对但位置不对)。第二次计算机猜2789,这时人应回答0A1B(因为没有一个数字是数字对且位置也对,所以写0A,数字2猜对但位置不对,写作1B)。直至计算机猜中1234.


我已经想出一个算法并实际验证和统计,8步以内猜出来的概率在万分之五以内,最多的是9步猜出来,平均在5.5-5.8步猜出来。
5万次猜数统计结果如下:
平均步数:5.61208
最大步数:9,最大步数发生位置:1193
步数 : 个数 - 百分比
0: 0.00 0.00%
1: 10.00 0.02%
2: 34.00 0.07%
3: 675.00 1.35%
4: 4,780.00 9.56%
5: 16,311.00 32.62%
6: 20,323.00 40.65%
7: 7,068.00 14.14%
8: 779.00 1.56%
9: 20.00 0.04%
10: 0.00 0.00%
问题:这种游戏所需的步骤在“一般情况下”最多是否需要9步?如是,则是如何计算出来的?
如不是,能否给出一个更优的算法来?

我的算法如下:
如第一步猜abcd 答案是0A2B则可计算如下:
可以作为答案的四位数的总数是10*9*8*7=5040;

对于0A2B的答案,可以计算:1、有第一步abcd的4个数里,其中有两个正确,C(4,2)=6种组合为正确的数;
2、但是,其中第一个正确的数除在其本位不对外,有3个可选的位置而第2个正确的数的位置有两种情况:
甲、第一个正确的数的一个可选位置恰好在第二个正确数的本位。则第2个数有3种可选的位置,
乙、第一个正确的数的其他两个可选位置和第个正确数的本位不一致,则第2个数有两种可选的位置。
所以位置可能性,计算得(1*3+2*2)=7

3、剩下的两个正确的数,在剩下的6位数里。其位置的可能性有c(6,2)*2=30

以上3个因子相乘6*7*30=1260.
这样,通过第一步的0A2B的答案过滤,5040个数里,被过滤得剩下了1260.

以下为某次具体猜数的过程:
1:0921 0A2B 1260个可能结果
2:7684 0A1B 504个可能结果
3:3079 0A1B 117个可能结果
4:1236 0A1B 38个可能结果
5:5108 1A2B 6个可能结果
6:5410 0A2B 3个可能结果
7:8195 1A1B 2个可能结果
8:8502 1A3B 1个可能结果
9:2805 4A0B
...全文
545 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzy18lzy 2010-01-20
  • 打赏
  • 举报
回复
正确的是可以控制制在7步以内,

可以到http://yzfy.org/dis/listpost.php?tid=703&extra=page%3D1

进行测试
  • 打赏
  • 举报
回复
mark!~
s_ongyu 2008-10-05
  • 打赏
  • 举报
回复
哈哈,多谢,这个地址里的资料很有趣!不知道是否已有相应的数学论文来对所需最多步数进行了讨论和计算?
jakqigle 2008-09-28
  • 打赏
  • 举报
回复
mark~!
Woodman007 2008-09-27
  • 打赏
  • 举报
回复
这里找到一个链接,已求出平均猜测次数最小的最优搜索树

http://www.javaworld.com.tw/jute/post/view?bid=35&id=138372&sty=1&tpg=1&age=0


1 次猜中次数: 1
2 次猜中次数: 7
3 次猜中次数: 62
4 次猜中次数: 691
5 次猜中次数:2444
6 次猜中次数:1756
7 次猜中次数: 79

总猜测次数: 26274
平均猜测次数: 5.213095
aaajj 2008-09-27
  • 打赏
  • 举报
回复
记号

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧