题目描述:

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座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+k=1+f(b-a-k)<1+f(b-a-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层开始做实验。

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

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

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

  2. 程序员智力题:100层楼扔鸡蛋,确定鸡蛋摔碎的楼层N

    程序员笔试智力题:建筑楼有100层,若曾第N层或更高的楼层扔下来,鸡蛋就会摔碎.若从第N层以下的楼层扔下鸡蛋不会摔碎.给你两个鸡蛋,请找出N,并要求最差情况下扔鸡蛋次数最少. 分析:试着从10楼开始扔 ...

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

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

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

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

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

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

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

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

  7. 100层楼和两个玻璃球

    有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??? 投掷次数分布不均.按最坏情况估计,这种方法 ...

  8. 100层楼和两个玻璃球思路解析

    有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层???       投掷次数分布不均.按最坏情况估 ...

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

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

最新文章

  1. 排球计分程序(八)——验证编辑方法(Edit method)和编辑视图(Edit view)
  2. 2018.12.15
  3. SAP UI5 that.getView().bindElement(that.Context)
  4. Java——集合(Map集合的两种迭代)
  5. Python工作笔记-往dll中传入char*类型的参数并且如何接收char*的值
  6. CS224d lecture 9札记
  7. mysql gitd 数据结构同步失败_mysql 5.7 gtid主从同步错误修复
  8. sakai mysql_一个完整的Sakai安装步骤
  9. 虚拟主机与云服务器的区别
  10. 2009年1月高等教育国际金融全国统一命题考试
  11. 用网络命令关闭计算机,如何在win7用cmd命令关闭无线网络
  12. Oracle卸载:指定数据库的诊断目标位置不存在解决
  13. 《实施Cisco统一通信管理器(CIPT1)》——导读
  14. 微信在Ios上h5不能分享
  15. Java EE现状及其发展趋势
  16. ABP学习实践(四)--分页查询
  17. 2023 小额现金贷网络贷款系统源码 支持打包成APP
  18. EasyRadius——Wayos路由计费的唯一选择
  19. 【相机标定基于消失点的外参标定】
  20. 武汉高性能计算大会2022举办,高性能计算生态发展再添新动力

热门文章

  1. Silver-Slides Chapter 1 - 强化学习入门:基本概念介绍
  2. Visual Graph常见问题回答(FAQ)
  3. Python爬虫之xlml解析库
  4. 眼花缭乱中看Metro Style—MS Apps Store—Desktop Apps以及Win-Runtime和Win32
  5. word文档中插入图片显示不全解决办法
  6. 第五周 项目二 建立链栈算法库
  7. 怎么在小程序中使用彩色图标iconfont
  8. Keil编程环境背景颜色--护眼色
  9. 学习笔记(16):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-推流基于rtsp协议的大华海康相机...
  10. android 重置电池信息,安卓手机用re管理器修改电池信息增加待机时间