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.