题目描述:

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。

网上有人说可以写动态规划方程来解决,我也没看。不过依我之见,这个问题通过简单的证明就可以得出结论。我们可以直接对n层建筑来分析。

如果我们只有一个鸡蛋,那么只能从最底层,一层一层的做实验,直到鸡蛋摔碎为止。

对于一个x层的楼,做这种实验最坏情况下需要的次数记为f(x).

现在我们有两个鸡蛋,并假设我们已经知道临界层是在[a,b]之间(共b-a+1层),那么我们第一次尝试要从哪层开始呢?假设从第a+k层开始,那么分两种情况

1)鸡蛋在第a+k层碎了,那么我们接下去要用剩下的那个鸡蛋从第a层开始,一层一层尝试下去,这样最坏情况下还需要尝试k次(a,a+1,…,a+k-1)

2)鸡蛋在第a+k层没有碎,那么我们就知道了,临界区是在[a+k+1,b]之间(共有b-a-k层),这样我们就把问题转化成为了一个更小的问题了。

以上两种情况,第一种情况下的最坏情况,总共尝试了k+1次,而第二中情况下,最坏的可能是1+f(b-a-k)。因此我们有:

f(b-a+1)=min{max{1+k,1+f(b-a-k)}|0<=k<=b-a}

很容易证明,函数f(x)是随自变量x单调递增的。于是我们有:1+k随着k的增加而单调递增,1+f(b-a-k)随着k的增加而单调递减。我们可以证明,当1+k=1+f(b-a-k)的时候,max{1+k,1+f(b-a-k)}取得最小值。证明如下,假设有任意一个k’!=k,

如果k’>k,那么1+k’>1+k, 1+f(b-a-k’)<1+f(b-a-k).由于1+k=1+f(b-a-k),因此有1+f(b-a-k’)<1+f(b-a-k)=1+k<1+k’

显然有max{1+k’,1+f(b-a-k’)}>max{1+k,1+f(b-a-k)}

如果k’

由上可知,我们第一步所要取的k,就是使得1+k=1+f(b-a-k)的一个值。那么对于n层的楼来说,我们有:

F(n)=1+k1=1+f(n-k1-1)

F(n-k1-1)=1+k2=1+f(n-k1-k2-2)

F(1)=1

F(0)=0

由以上一些公式我们可知:

1)1+k1=1+f(n-k1-1)=1+(1+k2),即k1=k2+1,这说明k1,…,km是一些连续的整数

2)n-(k1+1)-(k2+1)-…-(km+1)=0, 说明这些连续的整数(k1+1,…,km+1)的和是n

3)km<=0,说明这些连续的整数(k1+1,…,km+1)是从1开始的

由以上3点,我们可以知道,k1就是满足1+…+(k1+1)=(k1+2)(k1+1)/2=n的那个数。当然,如果找不到一个k1满足(k1+2)(k1+1)/2=n,那么只需要找到一个最小的k1满足(k1+2)(k1+1)/2>n,就行了。

由上可以看出,这道题我们不需要编程序什么的,只需要运用一点点算数小技巧,就可以推理得到答案。对于100层楼的情况,那么由于满足条件的最小k1是13,所以我们第一次就从第k1+1=13+1=14层开始做实验。

C语言丢鸡蛋100层,关于100层楼,扔两个鸡蛋,求摔碎鸡蛋的临界层的问题相关推荐

  1. 关于100层楼,扔两个鸡蛋,求摔碎鸡蛋的临界层的问题

    题目描述: 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事.有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置.可以摔碎两个鸡蛋. 网上有人 ...

  2. 两个鸡蛋,100层楼,找出摔碎鸡蛋的最低楼层,所用的摔鸡蛋次数最少

    题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...

  3. 100层楼,最少需要几次测试,才能得到摔碎鸡蛋的楼层

    我在腾讯二面碰到了这个问题. 转自:https://blog.csdn.net/Madoka_Homura/article/details/78331152 对于这个问题,如果从编程角度而言,最简单的 ...

  4. 2017年完美世界校招笔试题,从n层大楼往下扔m颗玻璃珠确定珠子破碎的临界楼层

    这道题可以搜索google扔玻璃珠笔试题以及腾讯2017的校招笔试也有一道这样的题,不同的是,以上的题中只是用了两颗玻璃珠,而这里是m颗玻璃珠: 不过,同样是扔珠子,所以思路都是一样,只不过变得更有普 ...

  5. 两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法

    题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...

  6. 100层楼扔鸡蛋或者玻璃珠问题

    ---------------------------以下网上别人的解答---------------------------------------------- 有一栋楼共100层,一个鸡蛋从第N ...

  7. 100层楼扔2个鸡蛋、3个鸡蛋……

    原题目 现有2个鸡蛋,楼高100层,假设从n层楼及以上扔下会摔碎,n层以下不会,那么怎样扔能以最小的次数得到n? 分析 最先想起来的是二分法的题目:100层最少需要扔多少次鸡蛋才能求得n?答案是cei ...

  8. 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数

    最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...

  9. 你还在用二分法求2个鸡蛋100层楼的问题吗?

    题目 2个鸡蛋,100层楼,如何用最少的试验次数得到在鸡蛋落下不碎的最高层数?这一据说曾被谷歌纳入校园招聘题库的经典面试题,想必许多人都曾遇到过,又有多少人与我一样,不加思索就直接回答用二分法查找的? ...

最新文章

  1. 35岁老码农:老板,你看我还有机会吗?
  2. 解读2019华为第001号文件:AI时代软件开发的第一要义是可信
  3. Doracle.jdbc.J2EE13Compliant=true
  4. WCF和webservice的区别
  5. ChannelHandler 与 ChannelPipeline 详解
  6. SugarCRM 去掉 header 应用程序 下拉菜单
  7. NetSuite 在中国 - 一个全程信息化管理平台
  8. 129 MySQL数据类型(重要)
  9. 20191128每日一句感恩节
  10. 人事面试100问题--巧妙应答
  11. 拉普拉斯逆变换matlab,利用MATLAB实现拉普拉斯变换及其逆变换.doc
  12. 第一次部署海康威视DEMO的一些坑,最终运行成功
  13. vue-tippy优秀悬浮框插件的两种使用方式(解决elementui的tooltip不及时消失及定位出错问题,使用el-progress进度条模仿柱状图,tippy模仿echarts悬浮框)
  14. 前端开发学习(七七)
  15. 算法创作|什么是数据结构
  16. HDU5619 Jam's store(最小费用最大流 MCMF)
  17. native-JavaScript通信流程( 基于最新的 react native版本 )
  18. 【腾讯云】云服务器 Nginx 内网访问 COS 省流量费
  19. linux 的vim快速查找内容
  20. 精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

热门文章

  1. java图形界面美化_Java图形界面设计——substance皮肤
  2. 黑马程序员最新版JavaWeb基础教程最后的案例学习记录
  3. 怎么备份织梦网站数据 网站备份教程
  4. vue+element实现鼠标移入出现按钮,并点击图片可跳转页面
  5. TapTap玩家评论——从爬虫到情感分析:APP爬虫、数据清洗、Pyecharts可视化、Word2Vec建模、LSTM建模
  6. linux luks分区加密,Linux下分区加密LUKS
  7. php正则获取table,[正则]分析获取table表格
  8. 浩易南:真假人脉圈子和行业精英
  9. Linux基础知识5:通配符、进程管理、命令替换符、转义符、shell元字符、ascii码对照表
  10. Android仿苹果siri浮动控件