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]原帖由[i]天痕[/i]于2005-01-17, 5:48:02发表
测试的方法:将从0123到9876依次测试所得的步数相加,总和最小者为胜。若总和相同,则步数方差小者获胜。 [/quote]
应该是从1023到9876吧?

2005-1-17 10:26 金圭子
[quote]原帖由[i]发呆[/i]于2005-01-17, 10:25:15发表
应该是从1023到9876吧? [/quote]
no,这儿不是4位数,是一个全排列。不需要考虑0在首位的情况。每个数字是对等的。

2005-1-19 15:20 天痕
自转设计与修改~~

2005-1-19 15:53 Maxwell
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文件<——可惜没用  
结果我已经给在上面了~~  
至于算法嘛~~过一段时间再放出来

2005-1-21 12:16 阿尔法孝直
不知楼主需要什么语言的?VB? C++? Pascal?

2005-1-21 12:19 Maxwell
什么语言都无所谓的,同样的算法各种语言用时差不了一个数量级的。

页: [1]
查看完整版本: 猜数字


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.