CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  软件培训/认证/考试 >  软件水平考试

猜数问题的算法

楼主lovesf56(天使之泪)2004-12-01 08:42:27 在 软件培训/认证/考试 / 软件水平考试 提问

2004。11。30(二)  
  问题:1-1000,共1000个自然数,有10000个人来猜,每个人可以猜30次。谁猜的数最小,而且不与其它人重复就获胜。限时2小时。  
   
  要求:每个人不能去了解别人猜的数是什么;游戏中每猜一次,主持人就会告诉你,你猜的数有人重复;或者无人重复,但不是无重复的数中最小的‘或者无人重复,且是无重复的数中目前最小的。  
  如果你猜了一个数,比如56,目前是最小的而且是唯一的,主持人就会告诉你,你猜的56是目前最小的且唯一,但不能保证到游戏结束时还是最小且唯一。  
   
  有什么办法取胜?  
  我觉得有点象博奕论的应用。  
  我想用二分法,先定一个数,比如500,如果有人重复,取半,猜250,再重复,再向下取半猜125或者向上取半猜375。。。  
  有一个策略是,游戏准备结束时再去猜,因为前面猜的数在漫长的游戏时间中很容易被人重复。  
  不能一味猜小数,因为大家都去猜1啊2啊3啊就没意思了。  
  不知道是数学问题还是计算机算法中的查找问题。  
  请各位指点,谢谢!  
  问题点数:0、回复次数:11Top

1 楼xman_df(df)回复于 2004-12-01 11:11:59 得分 0

我觉得你这个问题:很有可能的情况是最后没一个人获胜。  
   
  因为共1000个自然数,有10000个人来猜,每个人可以猜30次这样平均覆盖率(10000*30/1000=300)太高了,这样的结果一般都是1000个数没有一个不重复的。  
   
  我个人认为如果把问题该为共1000个自然数,有1000个人来猜,每个人可以猜30次,这样获胜的可能性比较大一些,这才涉及到用什么算法可以获胜的问题。  
   
  在上面这个前提下,我认为下面这个算法有可行之处:  
  给定两个参数A和B初始值都为0  
  你猜的数的公式为:S=A+(2的B次方)           S为你猜的数  
  每猜一次B=B+1,当S>1000时B重新置为0、A=A+1。  
   
   
  这个算法可以变通:比如A和B的初始值可以改变  
   
   
   
  Top

2 楼J2EE99()回复于 2004-12-01 13:23:36 得分 0

2004年11月软考试题分析  
   
  http://www.ciu.net.cn/Article_Show.asp?ArticleID=1532  
   
  CIU   2005精彩软考复习资料下载  
   
  http://www.ciu.net.cn/Article_Show.asp?ArticleID=1525  
   
  相关内容  
   
  http://www.ciu.net.cn/hzzx/kspx.htm  
   
  以考带学,始于证书,止于无限,CIU竭诚为广大考生服务!Top

3 楼lovesf(www.lovesf.net)回复于 2004-12-01 14:43:02 得分 0

xman_df  
  谢谢,我考虑一下Top

4 楼lovesf(www.lovesf.net)回复于 2004-12-02 11:49:15 得分 0

这个公式好象是单调的,不能向另外一个方向调整啊Top

5 楼postage(jh)回复于 2004-12-02 16:07:55 得分 0

哈哈,手机短信常难来骗钱的手段。Top

6 楼qinyidaxia(平凡)回复于 2004-12-02 16:21:22 得分 0

知道了Top

7 楼lovesf(www.lovesf.net)回复于 2004-12-02 16:46:58 得分 0

i   seeTop

8 楼iicup(双杯献酒)回复于 2004-12-02 21:41:37 得分 0

在这里,找到最小的数不在重要,  
  重要的是这个数不会被重复。  
   
  我们假设,有个人第一次猜   1  
  那么,肯定是“最小且不重复的”,  
  但显然他并没有取得最后胜利,  
  很快,他就会变成“有重复的”了。  
   
  当猜的人足够多,就会完全覆盖,任何数都是有重复的。  
   
  好像是手机骗钱的把戏。Top

9 楼lovesf(www.lovesf.net)回复于 2004-12-03 08:28:11 得分 0

大家都说是手机骗钱的把戏,可是如果真有的话,一定有很多人参加,那么如何取胜呢?Top

10 楼xman_df(df)回复于 2004-12-03 08:38:17 得分 0

我个人认为是单调的是正常的啊  
   
  因为你要的是最小的数啊。  
   
  还有你们大家都说是手机骗钱的把戏是因为:  
  共1000个自然数,有10000个人来猜,每个人可以猜30次这样平均覆盖率(10000*30/1000=300)太高了,这样的结果一般都是1000个数没有一个不重复的。  
   
  所以我上面才说:  
  把问题改为共1000个自然数,有1000个人来猜,每个人可以猜30次,这样获胜的可能性比较大一些,这才涉及到用什么算法可以获胜的问题。  
  Top

11 楼lovesf(www.lovesf.net)回复于 2004-12-13 08:49:58 得分 0

单调的意思,只要猜一个方向就可以获胜吗Top

相关问题

  • 求猜数字算法!
  • 数组算法??
  • ************拆数 [算法]************
  • 求:导数算法
  • 数据算法,类
  • 有谁想写破解"猜数字"的算法?
  • 征算法:大数除法。
  • 关于数学的算法
  • 急寻计数器算法!!
  • 求有效数字算法!!!

关键词

  • .net
  • 算法
  • 游戏
  • 手机
  • 重复
  • 自然数
  • ciu
  • 你猜
  • 获胜
  • 问题

得分解答快速导航

  • 帖主:lovesf56

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo