热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

100层高楼摔2个鸡蛋的问题?

在智力或算法测试中不时地会遇到一种类似的问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损。现给

在智力或算法测试中不时地会遇到一种类似的问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损。现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2个鸡蛋找到该临界楼层?
思考:给了我们2个鸡蛋,意思就很明显,有1个鸡蛋起到关键作用,它可以被打破,以告诉我们临界楼层大致在什么位置。如果给了我们99个及更多的鸡蛋,我们大致可以正序(2~100)或者倒序地(100~2)来逐层摔鸡蛋,在能摔破鸡蛋和不能摔破鸡蛋的临近两层楼的地方确定了临界楼层的楼层号。给了2个鸡蛋,那么我们可以大胆地想象通过摔破一个鸡蛋来提供给我们有用的信息以评估临界楼层。比如,我们很容易想到折半查找,从51楼摔一下鸡蛋,如果不碎,那么再从76,如果在76碎了,那么,从76和52的中值64处来试探貌似是不ok的,因为如果在64层,第2个鸡蛋也碎了,那么还有区间[53,63]都是可能摔碎鸡蛋的楼层。所以这种折半的方法不太靠谱,除非我们的鸡蛋远远超过2个。从刚才可以看到,我们将区间[2,100]通过折半的方法分成了两个段[2,50]及[51,100],效率是比顺序和倒序的情况(即不分段)好很多的,在折半分段的情况下,我们可以比不分段的情况少打破至少一半以上的鸡蛋,就可以测试出临街楼层。只不过在摔破鸡蛋的每个小段区间里,每个楼层都应该被逐层的试探。好了,这就是我们要的思想。那么,现在的问题是:怎么来合理地分段呢?刚才的折半的方法是非常粗糙的,在鸡蛋很少(只有2个)的情况下,是不可能使用折半查找的。我们大胆地估计一下,如果把100分成10段,那么要找到临界楼层,我们大致最多需要20次测试,我们通过2,12,22,32,...,不断地试探,确定了某个区间,就进入该区间逐个测试。试看:如果临界楼层在10层一下,我测试2楼的时候鸡蛋正常,测试12楼的时候鸡蛋破了1个鸡蛋,我们就回头从3楼,4楼测试到11楼,直到第2个鸡蛋被摔破,就测试出来了(如果鸡蛋不摔破,那么临界楼层就是第12楼),总共试探了11次。同理,如果临界楼层在90几楼,那么,我们从2,12,22,32,...,不断测试应该不超过20次就可以测试出来。到目前为止我们已经取得比较好的结果了。再想想,正方形的面积要比长方形多吧,我们可以不以平均一下,不管临界楼层是在2~12之间还是90~100之间都能在一个比较平均的测试次数下面来把它测试出来呢?试想,我们在90几的临界楼层时,区间大小如果都是固定的,那么对于临界楼层比较大的情形,就多产生了测试次数。我们很容易就想到,可以设想,让区间大小从前往后,逐步减少,让相邻的两个区间,楼层较低的区间段比楼层号较高的区间段多1,这样就保证了无论临界楼层在哪个区间段,我们总能通过同样的试探次数将能将其找出来,平均来说是最优的方案。那么这一切都完美无缺了。这就是我的想法。
解题:假设我们从第2个楼层开始试探,往楼层号码渐次增长的方向,每隔数个楼层,试探一次,并在试探到第1个鸡蛋摔破的地方停下来,用第2个鸡蛋来从最近一次试探没有摔破的楼层之上的那个楼层开始逐个楼层进行试探,知道鸡蛋被摔破,我们就得到了临界楼层,如果鸡蛋一直没有被摔破,那么第一个鸡蛋摔破的楼层就是临界楼层。现在假设第2个楼层和下一次试探的楼层之间有x个楼层,即第2次试探的楼层号是A(2)=x+3,以后试探的楼层间隔分别减少1,那么我们第3次试探的楼层号为A(3)=2x+3,第4次为A(4)=3x+2,第5次为A(5)=4x,第n次为A(n)=(n-1)*x-(1/2)*n*n+(5/2)*n,这里需要注意,我们试探的n不能超过x+1,可以这么想来:跳跃测试的n不应超过第一次最大的跨度(也即第一种需要连续测试的区间大小),及n<=x+1。那么把x替换为n-1,得到A(n)=(1/2)*n*(n+1)+1。楼层为100,那么A(n)=(1/2)*n*(n+1)+1>=100,得到n(n+1)>=198,得n=14,x=13,那么A(n)=(31*n-n*n-26)/2. 即通过楼层2,16,29,41,52,62,71,79,86,92,97,101,(104,106).作为间隔就可以在使用2个鸡蛋,不超过14次测试的情况下找到临界楼层。

其他的解法尚待参考。


推荐阅读
  • 模糊神经网络的训练策略与学习算法优化
    本文探讨了模糊神经网络的训练策略与学习算法优化,详细分析了基于FPGA和MATLAB的实现方法。通过改进的学习算法,提高了模糊神经网络在复杂环境下的适应性和准确性,为相关领域的研究者提供了有价值的参考和技术支持。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • CSWS_E_ROB深度估计方法
    论文链接:https:arxiv.orgpdf1708.02287.pdf正文翻译概述……首先,我们把深度估计看做一种多类别的密集标记任务,然后与基于公式的 ... [详细]
  • 最近在看GitHub上的一个很火的项目是:ImageSharp。这是一个纯.netcore的图像处理库,没有使用其他的任何依赖。在看这个项目过程中激发了我对图像文件编码解码的兴趣。 ... [详细]
  • 中文分词_中文分词技术小结几大分词引擎的介绍与比较
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了中文分词技术小结几大分词引擎的介绍与比较相关的知识,希望对你有一定的参考价值。笔者想说:觉得英文与中文分词有很大的区别, ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
  • 在探讨设计模式六大原则之二——里氏替换原则时,许多初学者可能会对其名称感到困惑。实际上,这一原则强调的是子类应当能够完全替代其基类,而不会影响程序的正确性。通过深入解析这一原则,我们可以更好地理解其在面向对象设计中的重要性和应用方法。本文将详细探讨里氏替换原则的理论基础及其在实际开发中的具体实践,帮助读者掌握这一关键设计模式原则。 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 深入了解 Azure Standard Load Balancer 的核心功能与应用场景
        Azure的负载均衡器就不需要多说了,属于很基础的组件了,各个云的LB功能其实也不太一样,Azure的4层LB属于相对来说功能比较基础的,不过好处是这东西也不要钱,不过Az ... [详细]
  • 数字化转型项目的实施路径与策略分析
    项目数字化【大型复杂项目背后的简单系统之美--项目数字化的路线图】最近在为项目数字化这个研究课题补课,补可视化和标准化的课。之前习惯将重点放在项目管理工具上,马上导入tapd、ji ... [详细]
  • 计算机网络计算机网络分层结构
    为了解决计算机网络复杂的问题,提出了计算机网络分层结构。计算机网络分层结构主要有OSI7层参考模型,TCPIP4层参考模型两种。为什么要分层不同产商 ... [详细]
  • 引起IGBT失效的原因  1、过热容易损坏集电极,电流过大引起的瞬时过热及其主要原因,是因散热不良导致的持续过热均会使IGBT损坏。如果器件持续短路,大电流产生的功耗 ... [详细]
author-avatar
手机用户2602885351
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有