腾讯2012 笔试题-----A、B两人玩猜字游戏
来源:互联网 发布:mac照片排序 编辑:程序博客网 时间:2024/06/10 20:34
这个是腾讯2012年暑期实习生招聘的一道笔试题,考试的时候也没仔细思考,没做出来。╮(╯_╰)╭。现在回过来想想,这题还是蛮有意思的,本人给出了一种解法,不能保证100%正确,希望大家看到了提出自己的见解。
A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。
请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。
首先阅读题目,一个很重要的信息点就是: 一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否 。如果没有这个条件,或者说改变这个条件,改为: 如果B猜的偏大,A会提示B这次猜的偏大 那么相信大家都会给出答案,那就是用二分法,只需要7次就可以保证猜对了。
但是现在的条件变了,如果B猜的偏大,那么不提示,所以我们得出结论就是:如果猜的偏大,只能一个一个往下猜。例如 A写的数是91,你猜了100,偏大了,那么你需要猜99,98,97一直到91。这样就保证对了。这里就不能猜95来节省次数了,因为猜了95 无论是偏大或者偏小,都不会有提示,所以95两边都是需要猜的。从100到91需要猜10次。
我从上面可以看出,当我们猜的数偏大了之后,需要一个合理的下届来限定往下猜的次数,从下面两个例子来说明每次猜的间隔也是非常重要。
例1:我们要猜的数还是91,我们第一次猜90(偏小有提示),第二次猜100(偏大无提示),于是从100一个一个往下猜,这里90就成为了下届,所以我们从100往下猜,最多需要猜10次就可以保证猜到了(10次中包括猜100这一次),这里间隔为10。
例2:我们要猜的数还是81,第一次猜80(偏小有提示),第二次我们猜100(间隔20),这时就需要从100一个一个往下猜20次才能猜到(20次中包括猜100这一次)。这里间隔为20。
我们要得到答案,其实就是需要确定这个间隔,和第一次猜的数字。
用n来表示间隔,需要猜的至少的次数 类似于此公式的最小值 n+100/n。很容易得到n为10的时候最小。后面解释这个公式的含义。我们先来看看我给出的答案的一个例子,理论的东西我也表达不清楚。
例3:我们要猜的数字是91,我们第一步猜10,以10为间隔猜。
第一步10(偏小有提示),第二步20(偏小有提示),第三步30(偏小有提示),第四步40(偏小有提示),……,第九步90(偏小有提示),第十步100( 偏大无提示),因此一个一个往下猜,第十一步99,第十二步98,第十三步97,……,第十九步91 命中。所以这里需要19步就猜中了。19步也是我们的答案 ,需要保证19次才能100%的猜到。找不到另外一个数字,需要19步以上的。看下例。
例4:我们要猜的数字是81,我们第一步猜10,以10为间隔猜。
第一步10(偏小有提示),第二步20(偏小有提示),第三步30(偏小有提示),第四步40(偏小有提示),……,第八步80(偏小有提示),第九步90( 偏大无提示),因此一个一个往下猜,第十步89,第十一步88,第十二步97,……,第十八步81 命中。只需18步小于例1的19步。
例5:我们要猜的数字是1,我们第一步猜10,以10为间隔猜。
第一步10(偏大无提示),因此一个一个往下猜,第二步9,第三步8,……,第十步1 命中。只需10步就可以还是小于19步。
题目要求我们要保证猜对,就是要100%猜中,所以应该是 要猜中1-100 所有数字所需次数的最大值,即19。这个是需要注意的。
再来说说 上面提到的公式,100/n就表示以10为间隔最多需要猜的次数,也就是我们例3中,猜的这几个步骤:10,20,30,40,……100。而n就代表从100猜到91需要的步骤,也就是间隔。
因为n + 100/n >= 20 其中100这里我们重复了,所以是19次。
在实验过程中,发现第一步猜的数字是不固定的,1-10中的任意一个均可。大家可以试试的。
例如:第一步猜1,我们要猜的数字是82,按照例3的方法,也是19次。
所以最终我给出的答案( 这种方法是错误的): B至少要猜( 19)次才能保证猜对?在这种策略下,B第一次猜测的数字是( 1到10任一均可)。
非常感谢 6楼的 @大傻师,给出了更完美的方案, 我这种方案的只考虑到了间隔固定的情况下,经过@大傻师提点确实当间隔不固定的情况下,还能减少猜需要的次数,下面是@大傻师给出的答案。
答案是14次,第一次猜的数字应该是9到14中任意一个数
假设第一个猜的数字是k1
如果第1次答案是偏小,那下一个就猜k2=k1+13,如果还是偏小,再就是k3=k2+12,依次类推
假设第一个猜的数字是k1
如果第1次答案是偏小,那下一个就猜k2=k1+13,如果还是偏小,再就是k3=k2+12,依次类推
如果哪次猜到答案是偏大了,就从那次猜的数字往下一个个猜,最坏情况就是14次。
例:如果第一个是9,那依次就是9,22,34,45,55,64,72,79,85,90,94,97,99,100
这题目确实锻炼人的脑子,开阔人的思维,是个不错的题目。欢迎大家提出宝贵的意见 谢谢!!
参考这个http://blog.csdn.net/liangbopirates/article/details/9764055
- 腾讯2012 笔试题-----A、B两人玩猜字游戏
- 2012腾讯 实习生笔试题目b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];
- 腾讯笔试题 求a^b<<2的计算结果 运算符优先级问题
- 【腾讯2012年实习生笔试加分题】不使用除法,由给定数组a[N]构造数组b [N],其中b[j]=a[0]*a[1]*…*a[N-1] / a[j]
- 腾讯2012笔试题
- 2012腾讯笔试题
- 给定一个数组a[N],我们希望构造数组b[N]。。(2013腾讯实习生笔试题)
- 2012腾讯实习笔试题
- 腾讯2012实习生笔试题
- 2012腾讯实习生笔试题
- 腾讯2012实习生笔试题
- 腾讯2012实习生笔试题
- 腾讯2012实习生笔试题
- 腾讯 2012 实习生笔试题
- 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题
- 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题
- 腾讯2017秋招笔试编程题--游戏任务标记
- 腾讯笔试:把两个数和告诉A,积告诉B,求这两个数是什么
- 虚拟机virtualbox中挂载新硬盘
- 正则表达式 中文
- 程序员编程艺术第三十四~三十五章:格子取数问题,完美洗牌算法
- proc_dir_entry结构说明
- android studio的安装
- 腾讯2012 笔试题-----A、B两人玩猜字游戏
- 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针
- 开源ocr库
- iOS 常用的三种动画表现效果
- SQLite学习实例, 日记本
- MonkeyRunner之手机屏幕截图的比对
- Visualize your shell history
- 用recommenderlab做电影推荐
- VBA 从一个excel读取特定行,列到指定excel