一种石头,在某一高度扔下就会碎,在这个高度以下不会碎,高度以上一定碎。现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。
2013-09-11 15:30
453 查看
http://blog.csdn.net/kittyjie/article/details/4732415
设x个鸡蛋扔y次可以测试F层,则F=f(x,y).
f(1,1)=1,f(1,2)=2........f(1,n)=n
f(2,1)=1,对于f(2,2),先测试一次,如果第一个鸡蛋没有破,则测试该层之上的层数为f(2,1),如果第一个鸡蛋破了,则测试该层之下的层数为f(1,1). 所以f(2,n)=1+f(1,n-1)+f(2,n-1).
因此f(2,1)=1, f(2,2)=3, f(2,3)=6, f(2,4)=10, f(2,5)=15, f(2,6)=21
=>f(2,n)=n*(n+1)/2
=>n=14
问题:
一种石头,在某一高度扔下就会碎,在这个高度以下不会碎,高度以上一定碎。现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。
分析:
这道题我们应反过来考虑,就是用a块石头扔b次至多一定可分辨层数X(a,b)。
先从最简装的一块石头考虑,很显然,
X(1,1) = 1
X(1,2) = 2
X(1,3) = 3
.
X(1,i) = i
再考虑二块石头,显而易见
X(2,1) = 1
对于X(2,2),我们可这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩1次机会.
即我们还可分辨下面的 X(1,1) 层.
如果石头没破,则
1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩1次机会.
即我们还可分辨上面的 X(2,1) 层.
我们知道,X(1,1) = 1.所以我们第一次从第二层开始扔,如果石头破了,则再测试第一层.如果没破则再测试第三层.
所以用2块石头扔2次至多一定可分辨
1 + X(1,1) + X(2,1) = 1 + 1 + 1 = 3 层.
不失一般性,我们考虑
X(2,i)
对X(2,i),我们这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨下面的 X(1,i-1) 层.
如果石头没破,则
1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨上面的 X(2,i-1) 层.
则
X(2,i) = 1 + X(1,i-1) + X(2,i-1)
接下来我们考虑
X(i1,i2)
同样,对 X(i1,i2),我们还是这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩i1-1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i2-1次机会.
如果石头没破,则
1,我们还剩i1块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i2-1次机会.
即
X(i1,i2) = 1 + X(i1-1,i2-1) + X(i1,i2-1)
很明显
无论你有几块石头,扔一次只能测试一层.
即
X(i,1) = 1.
这样,我们可制出如下表:
扔的次数: 1 2 3 04 05 06 007 008 009 010 011 012 013
分辨层数:
一块石头: 1 2 3 04 05 06 007 008 009 010 011 012 013
二块石头: 1 3 6 10 15 21 028 036 045 055 066 078 091
三块石头: 1 3 7 14 25 41 063 092 129 175 231 298 377
四块石头: 1 3 7 15 30 56 098 162 255 385 561 793 1092
五块石头: 1 3 7 15 31 62 119 218 381 637 1023
六块石头: 1 3 7 15 31 63 126 246 465 847 1485
也就是说用4块石头扔12次至多一定可分辨793层,扔13次至多一定可分辨1092层.
答案:
1000层的楼房,
用4块石头,扔13次一定可测试出来.
100层楼,两个鸡蛋。某层之上扔鸡蛋就会碎。问至少要测试多少次才能试出这个层数。
设x个鸡蛋扔y次可以测试F层,则F=f(x,y).f(1,1)=1,f(1,2)=2........f(1,n)=n
f(2,1)=1,对于f(2,2),先测试一次,如果第一个鸡蛋没有破,则测试该层之上的层数为f(2,1),如果第一个鸡蛋破了,则测试该层之下的层数为f(1,1). 所以f(2,n)=1+f(1,n-1)+f(2,n-1).
因此f(2,1)=1, f(2,2)=3, f(2,3)=6, f(2,4)=10, f(2,5)=15, f(2,6)=21
=>f(2,n)=n*(n+1)/2
=>n=14
问题:
一种石头,在某一高度扔下就会碎,在这个高度以下不会碎,高度以上一定碎。现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。
分析:
这道题我们应反过来考虑,就是用a块石头扔b次至多一定可分辨层数X(a,b)。
先从最简装的一块石头考虑,很显然,
X(1,1) = 1
X(1,2) = 2
X(1,3) = 3
.
X(1,i) = i
再考虑二块石头,显而易见
X(2,1) = 1
对于X(2,2),我们可这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩1次机会.
即我们还可分辨下面的 X(1,1) 层.
如果石头没破,则
1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩1次机会.
即我们还可分辨上面的 X(2,1) 层.
我们知道,X(1,1) = 1.所以我们第一次从第二层开始扔,如果石头破了,则再测试第一层.如果没破则再测试第三层.
所以用2块石头扔2次至多一定可分辨
1 + X(1,1) + X(2,1) = 1 + 1 + 1 = 3 层.
不失一般性,我们考虑
X(2,i)
对X(2,i),我们这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨下面的 X(1,i-1) 层.
如果石头没破,则
1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨上面的 X(2,i-1) 层.
则
X(2,i) = 1 + X(1,i-1) + X(2,i-1)
接下来我们考虑
X(i1,i2)
同样,对 X(i1,i2),我们还是这样考虑,当我们扔第一次后,有两种可能:破和不破.
如果石头破了,则
1,我们还剩i1-1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i2-1次机会.
如果石头没破,则
1,我们还剩i1块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i2-1次机会.
即
X(i1,i2) = 1 + X(i1-1,i2-1) + X(i1,i2-1)
很明显
无论你有几块石头,扔一次只能测试一层.
即
X(i,1) = 1.
这样,我们可制出如下表:
扔的次数: 1 2 3 04 05 06 007 008 009 010 011 012 013
分辨层数:
一块石头: 1 2 3 04 05 06 007 008 009 010 011 012 013
二块石头: 1 3 6 10 15 21 028 036 045 055 066 078 091
三块石头: 1 3 7 14 25 41 063 092 129 175 231 298 377
四块石头: 1 3 7 15 30 56 098 162 255 385 561 793 1092
五块石头: 1 3 7 15 31 62 119 218 381 637 1023
六块石头: 1 3 7 15 31 63 126 246 465 847 1485
也就是说用4块石头扔12次至多一定可分辨793层,扔13次至多一定可分辨1092层.
答案:
1000层的楼房,
用4块石头,扔13次一定可测试出来.
相关文章推荐
- 【转载】面试_现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。
- 给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)
- 关于后台返回数据为一个整体,我们需要拿某一个字段出来单独以这个字段进行分类的需求
- win7上运行某程序的时候,如果这个程序需要以管理员的身份运行,那么就会有“用户帐户控制”的提示:“您想允许来自...发布者的以下程序对此计算机进行更改吗?”请问,win7如何知道哪些程序需要以管理员的身份运行?
- 牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼
- 小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
- 现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
- 有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数
- 第五题:n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1
- 某系统中有3个并发进程都需要4个同类资源,该系统不会发生死锁的最少资源数量?
- 现在为了让程序兼容vista,我们需要给程序加上一个manifest文件,可是有时候vc6它就会弹出Resource Compiler Error RC2170 的错误,可能是vc6一个bug,我个人对vc6还是很喜欢的,不过经常会有编译死掉或出错的问题,
- Java版,如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q
- 一年了!现在又需要这个博客了!
- 如果你现在没有目标,对未来很迷茫、、打扰下 耽误几秒钟看看这个故事 故事很短 但是你一定会有所收获
- 需要把你系统中的部分程序独立出来,比如用户设置的这个程序。
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- 程序员面试金典: 9.3栈与队列 3.3设计一个栈,栈到一定高度就会另外建栈。
- 景鲲:开放是一种心态和气度,这个时代需要标杆
- 有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠.
- 10.百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。