# 一輛卡車要運貨物,你想知道最大能載多重?
def can_carry(weight):
return weight<=1000
l,r = 0,2000
while l<r:
m = (l+r+1)//2
if can_carry(m):
l = m
else:
r = m-1
print('最大載重:',l)
Output:
最大載重: 1000
# 為什麼寫 (l + r + 1) // 2?
# 這是避免「死循環」的技巧,因為:
# 若你寫的是 m = (l + r) // 2,當 l + 1 == r 時,m 會等於 l,不會推進範圍。
# +1 可以保證在 l + 1 == r 的情況下,m == r,然後觸發 r = m - 1 或 l = m,這樣才能收斂。
沒有留言:
張貼留言