腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?
来源:互联网 发布:java public abstract 编辑:程序博客网 时间:2024/06/05 19:32
先说答案:猜测序列为14, 27, 39, 50, 60,69, 77, 84, 90, 95, 99,哪一次偏大了,就在该数与上一个数的区间一个个猜,最多13次一定能猜到。
如何得到上面这个答案呢?其实这道题跟google那道100层楼丢玻璃球问题是一模一样的,只不过换了一种说法而已。下面讲讲解题思路。
刚一看到这道题,熟悉二分查找的同学肯定马上想到要用二分查找来猜,第一个猜50,第二个猜25或者75……可是这样有一个问题,传统的二分查找是需要每次都知道是偏大还是偏小的,但这里一旦偏大,就再也得不到这个信息了。这就导致了在这里如果继续使用这种类似二分查找的方法最坏情况下猜测次数分布不均匀。比如,如果猜50,偏大了,那只能把50以内的挨个猜一遍,需要50次;但如果偏小了,那再猜75,若偏大,此时只需要在(50,75)之间挨个猜一遍,共1+1+24=26次;显然,偏大的情况越晚出现,需要的总次数越少。这就是最坏情况总猜测次数分布不均匀的体现。
直觉告诉我们,要使得总猜测次数最少,那就让最坏情况的猜测次数分布均匀即可。假设最多猜测k次,那么第一个猜的数字应该是k+1,因为若偏大了,则逐一把k, k-1, ……2的共k-1个数猜一遍,最坏的情况是都没猜中,则1必定是正确结果;若偏小了,则继续按照下面讲的方式猜。
若偏小了,则第二个猜的数字x应该是什么呢?这就要使得若第二次猜偏大了的话,必定能把总共的猜测次数也控制在k次,因此第二个猜的数x跟第一个猜的数k-1之间要间隔k-1个数,因为这样的话,即使第二个数偏大了,则逐一把x-1,x-2,……k+2的共k-2个数猜一遍,必定能得到答案。因此第二个猜的数字x为2k。
依此类推,要把100覆盖,则可以列出不等式:(k+1) + k + (K-1) + …… + 2 + 1 >= 100,解得k >= 13(取整之后)。
- 假设你有2个鸡蛋,你现在想知道这些鸡蛋的硬度。
- 你家住在120层高的大楼里,现在要在这座大楼上测试鸡蛋的硬度。
- 每个鸡蛋的硬度相同,鸡蛋的硬度定义为:如果鸡蛋从第m层上掉
- 下来没有破裂,而从第m+1层上掉下来就破裂了,那么这个鸡蛋的
- 硬度就是m。某个鸡蛋如果在实验中破裂了就永远的损失了。要求
- 提供一种方案,在最坏情况下做最少需要最少次数的实验即可把鸡
- 蛋的硬度检验出来?
- 腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?
- 猜[1,100]之间的数字——腾讯笔试题
- 1—100猜数字,腾讯笔试题
- 一个猜数字的游戏
- 腾讯猜字游戏
- 腾讯的一个笔试题
- 一个猜数字游戏的算法
- 一个猜数字的游戏(源代码)
- 一个猜数字游戏代码的改进
- 一个简单的猜数字游戏
- java猜数字,一个简单的游戏
- 一个简单的猜数字游戏
- 制作一个简单的猜数字游戏
- 编写一个程序,数一下1—100的所有整数中出现多少次数字9
- 腾讯笔试题 2 有趣的数字
- 猜数字游戏(一道java笔试题)
- 用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。
- 用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。
- C++ 初始化成员列表
- To the Max(poj1050,最大连续和)
- 项目总结——谈谈封装(抽象工厂+反射+缓存机制)
- Cuts the cake_hdu_2134.java
- hdu 题目 1384 Wall(凸包)
- 腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?
- 滑雪(poj1088,DP+记忆化搜索)
- 11个免费的网页安全测试工具
- 画8_hdu_1256(图形).java
- Linux下LCD驱动详细分析(一)
- Try jQuery官方教学视频练习解答
- 关于ListView和ViewPager冲突的解决办法
- Hdu 4424 Conquer a New Region 并查集
- free命令、buffer与cache的区别、交换分区swap