欢迎大家来做一道算法题

netsky 2000-07-13 11:33:00
由电脑随机产生四个数字(隐藏的),这四个数字均不相同,要由你去猜。
然后,电脑会根据你每一次的猜测给出相应的提示。
提示为:1个六角星,表示你已经猜中了其中一个数字,而且排列位置正确。
1个圆圈,表示你已经猜中了其中一个数字,但排列位置不正确。
当同时出现1个六角星和一个圆圈,表示你已经猜中了两个数字,
一个位置正确,一个位置不对,仍需努力。
其他情况以此类推......

假设你具有足够高的智力和足够倒霉的运气,请问最多需要多少次才能猜中?

希望各位大虾能把自己的主要思路,代码贴出来,一起算计,让我等菜鸟学习学习.
...全文
903 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
Big_Ants 2001-10-14
  • 打赏
  • 举报
回复
好象天之痕里有啊,哈哈!
gop 2001-10-14
  • 打赏
  • 举报
回复
我知道不是最优,但可以作为框架,

优化的关键在于------从候选集中提交哪个作为"猜数"?

即:提交那个数作为猜数可以使返回的符号中信息含量最大化?

可能需要用点信息论的知识来作优选.
Erlin 2001-10-14
  • 打赏
  • 举报
回复
To gop:

你这种方法很多人都用过了,请看前面的回复,但肯定不是最优的方法,大家是在寻找一个
最优的方法。
gop 2001-10-13
  • 打赏
  • 举报
回复
haha,居然被推了出来.

吧10个数取4的全部组合作为备选集合,

然后从备选集合中随意去一个作为"猜数"提交,得到结果符号.

用猜数和结果符号组成规则,去过滤候选集(即从候选集里随意取一个数当作正确结果,

用这个正确结果去对比提交的猜数,看能否得到相同的图形符号,能得到的保留,不能得到的

抛弃).

过滤几次就得到唯一结果了.如果得不到,就是对方在愚弄你,呵呵.

我参经统计过这种算法的结果(以每个可能的组合为最终答案),6次以内基本有结论.

比较遭的情况也有出现.但可能还有优化的方法.
NowCan 2001-10-13
  • 打赏
  • 举报
回复
这个帖子有一岁多了。
Erlin 2001-10-12
  • 打赏
  • 举报
回复
UP
kaisoft 2000-11-30
  • 打赏
  • 举报
回复
最倒霉是5次,
一:先试1234
二:再试5678,此时至少已知A,B是结果
三:再试9和2个A和1个B的结果(如9AAB,此时要使A和B放在和上次不同的位置如上次A在3,B在4则用AAB9),此时如9不是结果则0是,而A的位置也已确定,因已放过3个位置),结果A,B,C,D都已知。
四:此时B已试过2个位置,用一个2B和2个C试(规则同上)则B,C位置确定
五:OK
milefo 2000-11-30
  • 打赏
  • 举报
回复
应该是6次的说!
原理我下来在好好想想!
goodoldcat 2000-11-26
  • 打赏
  • 举报
回复
faint......
某一年的全国信息学竞赛题(95好像是,不是到会不会是ioi的),好心你就自己去买书了,
很容易的
sunapollo 2000-11-01
  • 打赏
  • 举报
回复
数字共有10位*4位置=40个信息,每猜一次,最多能得到4个信息(A+B<=4),如果你做够倒霉,需要7次到8次,其中最倒霉的情况是,每一次出现1A1B(A表示数字及位相同,B表示数字位不同而数字相同),还有在演算时,是不能输入相同位的,上面有人输,是不符要求的。
enlightenment 2000-10-01
  • 打赏
  • 举报
回复
我来插一句,一年以前我曾经编写了一个“猜数字游戏及其破解程序”,其中结果“A”对应于上面所说的六角形,“B”对应于圆圈。其中有可以用于统计的功能(编写程序时该功能是作为秘籍的,所以帮助文件里没有写出),后面详细介绍。其中的“破解”功能可根据用户输入给出提示。
我会给帖子主人发一份,并且我已经上载了程序,相信不日就会贴出来,若有兴趣的可以到“expert.csdn.net”的共享软件区下载,或也可以直接向我索要。
我的邮箱:ee_Lqm@263.net

在编写程序的过程中,我用自己的程序不下调试过几千次,但是用我提供的破解程序还从未超过七次算出正确答案。当然,这只是经验之谈。

安装并执行程序后,在“游戏破解”可以用于统计在输入当前的几组值之后,所有有可能的答案。可用于逐步统计可能性情况。

以下内容为本程序的特殊功能,均为首次公开,只有进本帖子的人看到:

1.在“进入游戏”页面,按键“Ctrl+Alt+Shift+F5”显示游戏的正确答案;
2.在“游戏破解”页面,按键“Ctrl+Alt+Shift+F9”列出在输入当前的数值时所有可能的正确答案的个数。
3.在“游戏破解”页面,按键“Ctrl+Alt+Shift+F10”强行列出在输入当前的数值时所有可能的正确答案的具体值。

程序还算不错吧(自我感觉良好的典型)!可能开始不太熟(帮助较简单F1),用一下就会了。如果说不好,那我也可以推脱——那是一年前编写的嘛!
界面是模仿Sonique的设计,所以当时未发表,只是在同学们之间(那时还没毕业呢)copy了几份。
说来真的太巧,去年的“十一”那天,这份程序刚刚编写完,给我的哥儿们送了。今年恰逢“十一”我看到网上这张帖子,上载程序。唉!感慨万分!...

祝各位“十一”快乐!
  • 打赏
  • 举报
回复
ask you a another question
How can I upload the code?
by a way ,How can I speak to the man who is online directly?
whitehare 2000-09-12
  • 打赏
  • 举报
回复
8次

超过8次说明你思路不对.
元明 2000-08-23
  • 打赏
  • 举报
回复
感兴趣
Erlin 2000-08-23
  • 打赏
  • 举报
回复
谢谢melice的指点,其实我刚写上去的时候就知道这种方法不妥,但一直都没有去想改正它,不知道你有没有更好的想法,请赐教
我个人认为这道题还是很有意思的,这么久了,还没有一个答案有说服力,我不赞成用手工排
Erlin 2000-08-23
  • 打赏
  • 举报
回复
谢谢melice的指点,其实我刚写上去的时候就知道这种方法不妥,但一直都没有去想改正它,不知道你有没有更好的想法,请赐教
我个人认为这道题还是很有意思的,这么久了,还没有一个答案有说服力,我不赞成用手工排
jackal_lure 2000-08-23
  • 打赏
  • 举报
回复
是否真的有答案,只要有就可以做
melice 2000-08-22
  • 打赏
  • 举报
回复
erlin的算法应该是可以出结果的,但不会出现最优的结果。
将第二步改一下。
Tyro 2000-07-25
  • 打赏
  • 举报
回复
我先分析一下在知道了4个数字之后排列这四个数字的情况:(最多需要5次)
设4个数字为a,b,c,d,则先排aaab,这时根据六角星的数量推一下
0个六角星,可知a在第4个位置
2个六角星,可知b在第4个位置
1个六角星,再排列aaac,如果2个六角星,表明c在第4个位置,如果还是只有一个六角星,表明d在第4个位置
所以最多两次排列可以知道第4个位置的数字
下面可以通过一次排列得知第3个位置的数字
再通过一次排列可以得知前2个位置的数字
所以4次就可以将已知的4个数字排好顺序

看来我前面写的5次还多了一次:)
最多9次可以得知究竟是哪4个数字是正确的,所以最多不会超过13次

关键是在选择数字时是否可以处理一些排序的步骤,可能实际数字比13次还要少
Tyro 2000-07-25
  • 打赏
  • 举报
回复
re:xiaoy2000
呵呵……如果知道了是哪四个数字,只用5次就可以排列好顺序,何必23次?
加载更多回复(21)

33,010

社区成员

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

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