100 层楼两个鸡蛋

有座 100 层高楼和软硬程度一样但未知的两个鸡蛋,要求用这两个鸡蛋以最少的次数确定哪一层是鸡蛋可以安全落下的最高位置。鸡蛋有可能在一楼就摔碎,也可能在一百楼摔下也没事。

假设 L 层鸡蛋没碎,L+1 层碎了,则 L 层就是所求。因为只有两个鸡蛋,所以第一个鸡蛋摔碎后,一定要能用第二个鸡蛋在限定的次数里测出目标层。

考查一个中间状态,假设最少的次数为 C。

之前已经测了 C0 次(C0<C) 层数为 L0,测到 C0+1 次层数 L1 为时,第一个鸡蛋碎了。则第二个鸡蛋就从 L0+1 层测到第 L1-1 层,可能需要测试 (L1-1)-(L0+1) 次,这个次数的限定条件是要小于 C-(C0+1)。从这个状态我们可以看出来,第 C0+1 次的楼层范围应该比 C0 的楼层范围少 1 才可以(例如:若 C0 次为 28 层到 40 层,则C0+1 次为 41 到 52。)。依次类推,设第一次的楼层为 K, 就可以得到以下的解法:

K+(K-1)+(K-2)+...+(K-C+2)+(K-C+1) >=100;最后一次时,楼层范围应该为 1,所以 K 应该和 C 相等。所以公式变为

K +(K-1)+..+1 >=100;即 K(K+1)/2>=100;得到 K 为 14;所以最少的次数为 14,也就是第一次从 14 层开始测试。

或者也可以用反推法,就是最后一次楼层为 1,然后前一次楼层依次加 1,得到的结果是相同的。

最后,真的有这样的鸡蛋么?从二楼摔下都不碎!

----------------------------------------

感觉很简单的一个事儿,看着这么多符号反而觉得不简单了。

这是以前写的,觉得复杂的请自行到网上查找,应该有很多讲解决方法的。

时间: 2024-11-09 10:24:47

100 层楼两个鸡蛋的相关文章

100层楼2个鸡蛋

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数. 设最坏情况下的次数为K,如果第一个鸡蛋第一次就在x层摔坏,则第二个鸡蛋应该从第1层开始试到x-1层,最坏还要试x-1次,则总测试次数为1+(x-1)= K,x=k; 如果第一个鸡蛋第一次在x层没坏,第二次摔坏了,此时已经测试了2次了,则第二个鸡蛋最坏能够测试k-2次,设第二次摔坏的层数为y,则第二个鸡蛋应该从x+1层开始测试

poj 3783 DP 2个鸡蛋扔100层楼的加强版

http://poj.org/problem?id=3783 估计23号之后的排位赛之后我就要退役了,这之前最后再做5天ACM 今天的排位很惨,上次排位也很惨......这道题原来算法课老师讲过,模模糊糊记得方程,但是边界处理有问题, dp[i][j]=min(1+max(dp[k-1][j-1],dp[i-k][j]))   k=1 to 楼数 dp[i][j]:i层楼扔,手里有j个ball 的次数 边界两个:1.dp[1][i]=1,第一层无论手里有几个鸡蛋都是1次,2.dp[i][1]=i

由2个鸡蛋从100层楼下落到HashMap的算法优化联想

题目: 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层下落会摔破,在第N层以下的楼层不会摔破,给你两个鸡蛋,设计方案找出N,并且保证在最坏的情况下,最小化鸡蛋下落的次数.(鸡蛋没有摔破是可以重复利用的) 在这里,熟悉HashMap的底层实现的同学可能会想到,这里给你两个鸡蛋其实是给你两次机会做测试,第一次机会可以联想到通过HashCode的值来作为数组的分组存储依据,第二个鸡蛋则是让你在LinkList中遍历用的.即两次的操作,一次分组,一次遍历,通过两次操作即能确保找出那个层数N.但是这里略

你拿着两个鸡蛋站在 100 层的大楼上。鸡蛋或许结实到从楼顶掉下也不会摔破。或许很易碎,在一楼摔下就破碎。

你拿着两个鸡蛋站在 100 层的大楼上.鸡蛋或许结实到从楼顶掉下也不会摔破.或许很易碎,在一楼摔下就破碎.请问最少试验多少次可以确保找出鸡蛋不会被摔碎的最高楼层? 注意:1.只有两个蛋2.确保找出 一开始,我们先用猜的吧:我猜测,鸡蛋不会被摔碎的最高楼层是27层,于是从27层摔了一个鸡蛋下去.结果有两种:1.鸡蛋碎了.那么,鸡蛋不会被摔碎的最高楼层,在第1层至第27层之间.此时只剩下一个蛋了.为了确保找出,这个蛋,就不能猜了.因为,万一又猜错了,就没有鸡蛋可以试验,也就无法确保找出鸡蛋不会被摔碎

[面试题][总结]100层楼丢玻璃球测试临界可破层数,用两个一模一样的球来测试计算尽可能少的次数?

1 题目描述  有一栋100层高的大楼,给你两个完全相同的玻璃球.假设从某一层开始,丢下玻璃球会摔碎.那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层? 2 解法汇总 2.1 递推方法一 第一次扔k层 ,则次数time=1,第二次,如果破了,要试从1到k-1层,此时需要Time=time+k-1=k 次:如果没破,还要扔k层,则次数为time=2;如果破了,还要扔k+1到2k-1层,再加上2 即Time=Time+k-2=k.还是K次:注意每多扔一次 少测试一层.次数却多一次.实

相加等于100的两个数

大致题意:有一个整数数组,找出其中所有相加等于100的两个数. 方法一:用两个for循环. 时间复杂度为o(n^2) 方法二:先排序 将最小的与最大的相加 若和小于100,则将最小的去掉 若和等于100,则把两个数输出 若和大于100,则把最大的去掉 时间复杂度为o(n*logn)+o(n)=o(n*logn) N:当有多个相同的数字时,不知道怎么弄 不知道有没有更好的方法.!!

[CareerCup] 6.5 Drop Eggs 扔鸡蛋问题

6.5 There is a building of 100 floors. If an egg drops from the Nth floor or above, it will break. If it's dropped from any floor below, it will not break. You're given two eggs. Find N, while minimizing the number of drops for the worst case 这道题说有10

Eggs Dropping puzzle(2 eggs, 100 floors)

题目如下: You are given two eggs, and access to a 100-storey building. Both eggs are identical. The aim is to find out the highest floor from which an egg will not break when dropped out of a window from that floor. If an egg is dropped and does not brea

待字闺中之鸡蛋挺住体

题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号"待字闺中" 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事.有座100层的建筑,要你用这两个鸡蛋通过最少的次数确定哪一层是鸡蛋可以安全落下的最高位置.可以摔碎两个鸡蛋 方法分析 看到这个题目,最保险的方法就是一层一层试验,但这样只需要一个鸡蛋就可以了.我们现在有两个鸡蛋,完全可以用有更快的方法. 进一步呢?可能试验的方法是二分查找,例如,第一个鸡蛋再50层扔下,如果碎了,第二个鸡蛋从1