前言
前几天在CSDN上看到了一道有趣的问题,可分享给大家。
问题描述
有一种玻璃杯从一栋100层的大楼扔下,该种玻璃杯超过某一层楼会摔碎。现在给你两个杯子,问确定最低摔碎的楼层需要摔多少次?
注意:这个问题的解读应该是尽量让次数是常数,不随最低摔碎楼层的高度受影响
解答
刚开始可能会想到用二分法,但是用二分法的话,次数会随摔碎楼层的高度的变化而变化,而且可能在还没知道具体哪个楼层之前两个杯子就全摔碎了!!!
既然是两个杯子,那就是两个杯子各有作用了,可以想到的是,一个杯子确定范围,一个杯子确定具体楼层,可以这样考虑,相同楼层间隔下:最低摔碎的楼层越高,Cup1需要扔的次数越多,Cup2需要扔的次数可认为相同;Cup2需要扔的次数随楼层间隔的增加而增加。这里我们可以使Cup1需要扔的楼层间隔递减,这样可改善高楼层所需Cup1/Cup2扔的次数。假设第一次扔的楼层间隔为X,此后依次递减1层,直到楼层间隔为2.则:
x
+
(
x
−
1
)
+
(
x
−
2
)
+
.
.
.
+
2
>
=
100
x+(x-1)+(x-2)+...+2 >=100
x+(x−1)+(x−2)+...+2>=100
答案是14。
结束语
本人大三学生一枚,学识尚浅,不喜勿喷,希望今日能抛砖引玉,请各位大佬一定不吝赐教!!!
参考自链接:https://www.jianshu.com/p/768dce3c1c18