Board logo

标题: 猜数字 [打印本页]

作者: 天痕    时间: 2005-1-17 05:48

猜数字这个游戏想必大家不陌生吧~~  
不过以防有人不知道,还是把题目描述一下  

1:给定一个4位数,每个数位上的数字不重复。当然这个数你不知道  
2:你来猜一个四位数  
3:若你猜的四位数中有N个数字同给定四位数中的数字位置大小都相同则记N个A。
4:若你猜的四位数中有M个数字在给定的四位数中出现则记(M-N)个B。
5:若记录为4A则结束游戏,否则回到2  
6:计算你猜测的总次数K。

现在请大家设计自己的算法,使得所需猜测的总次书最小~~  
测试的方法:将从0123到9876依次测试所得的步数相加,总和最小者为胜。若总和相同,则步数方差小者获胜。  

答卷以卖帖的方式提交,售价1枚。

大家可以自己写程序(计算机方法)或者数学推理过程(数学方法)
也可以只提供算法(计算机方法),由我来代劳程序  


前三名有赏~~

第一名:500通宝  外加让天痕抱抱  
第二名:300通宝  外加让天痕摸一下脸  
第三名:200通宝  另外没有什么附加奖赏了
作者: 发呆    时间: 2005-1-17 10:25



QUOTE:
原帖由天痕于2005-01-17, 5:48:02发表
测试的方法:将从0123到9876依次测试所得的步数相加,总和最小者为胜。若总和相同,则步数方差小者获胜。

应该是从1023到9876吧?
作者: 金圭子    时间: 2005-1-17 10:26



QUOTE:
原帖由发呆于2005-01-17, 10:25:15发表
应该是从1023到9876吧?

no,这儿不是4位数,是一个全排列。不需要考虑0在首位的情况。每个数字是对等的。
作者: 天痕    时间: 2005-1-19 15:20

自转设计与修改~~
作者: Maxwell    时间: 2005-1-19 15:53

n = 4  A = [0..9]
1. 从A中随机取出n位数,生成当前四位数
2. 生成当前四位数的补集A
3. 依次改变各位上的数字为补集中的数字,测试AB的变化情况,确定哪些位是A哪些是B(说的不严谨)
4. 调整B的位置使其全部产生A
5. n - N转到1

  没受过做竞赛的训练,只好乱写一气,算是制造人气吧   这个思路肯定能求出来,不过应该是最慢的算法了  程序也比较繁杂,就。。。
作者: 天痕    时间: 2005-1-20 03:05

。。。。。。
Maxwell的方法步数显然很多  
远远超过了文曲星上同类游戏要求的8步  
不过作为一种算法还是可以接受的~~

再等几天,看看还有没有人回复
作者: 天痕    时间: 2005-1-20 07:39

花30分钟编了一下,但运行了两小时多  

下面先给出结果:

猜数字总可能性:5040种
最少猜测次数:1  
最多猜测次数:8(也只有两个数~~)
总猜测次数:29843
平均猜测次数:5.92


再加个EXE文件<——可惜没用  
结果我已经给在上面了~~  
至于算法嘛~~过一段时间再放出来

附件: 116.exe (2005-1-20 07:39, 3.91 K) / 该附件被下载次数 330
http://www.xycq.org.cn/forum/attachment.php?aid=4491
作者: 阿尔法孝直    时间: 2005-1-21 12:16

不知楼主需要什么语言的?VB? C++? Pascal?
作者: Maxwell    时间: 2005-1-21 12:19

什么语言都无所谓的,同样的算法各种语言用时差不了一个数量级的。




欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/) Powered by Discuz! 5.0.0