有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?
时间: 2024-03-08 18:45:02 浏览: 14
这是一个经典的面试题,可以使用二分查找的思想来解决。
具体的做法是:
1. 将大楼按照一个固定的间隔划分成多个区间,比如每10层划分为一个区间。
2. 用第一个玻璃球从第一个区间的最底层开始往上扔,如果碎了,就说明临界层在第一个区间内,否则就继续往上扔,直到它碎掉为止。
3. 然后用第二个玻璃球,从第一个玻璃球碎掉的那一层的下一层开始往上扔,一直到它碎掉为止。
4. 根据第一个玻璃球碎掉的层数和第二个玻璃球碎掉的层数,可以确定临界层位于哪一个区间内。
5. 将这个区间再按照相同的方式继续划分,直到找到临界层为止。
这种方法最坏情况下需要的最少次数为19次,因为100层的大楼最多需要划分19个区间。
相关问题
一栋A楼有地上20层,地下3层,层高3米,计划在A楼前面建造一栋B楼。那么,根据最低要求的前后楼间距应为多少米
根据最低要求,前后楼间距应为至少6米。这是因为A楼地上20层和地下3层的总高度为(20 + 3) * 3 = 69米。为了保证足够的采光和通风,前后楼间距通常应该是相邻建筑物高度的2倍,即2 * 69 = 138米。由于B楼还未建造,我们只能根据A楼的高度来计算前后楼间距,即138 - 69 = 69米。所以,根据最低要求,前后楼间距应为至少69米。
编写程序实现:有一栋9层高的宿舍,每层各有24间房间,请随机生成n间宿舍存放在列表dorm_list中给网络系使用,其中n由用户输入,寝室编码为x0y,x为楼层,y为宿舍编号。
下面是 Python 代码实现:
```python
import random
n = int(input("请输入宿舍数量:"))
dorm_list = []
for i in range(n):
floor = random.randint(1, 9) # 随机生成楼层
room_num = random.randint(1, 24) # 随机生成宿舍编号
dorm = f"x{floor}y{room_num}"
dorm_list.append(dorm)
print("生成的宿舍列表:", dorm_list)
```
运行程序后,用户需要输入宿舍数量,程序会随机生成指定数量的宿舍编号并存放在列表 `dorm_list` 中,最后打印出列表中的所有宿舍编号。