- 例题
假设要把长度为 n 厘米的木棒切分为 1 厘米长的小段,但是 1 根木棒只能由 1 人切分。求最多有 m 个人时,最少要切分几次。譬如 n = 8,m= 3 时如图所示,切分 4 次就可以了。
题目来源:程序员的算法趣题Q4
思路:
如果人数足够,每次对半切分一定最快。人数不足够时,每人每次只能增加1根木棒。
也可以逆向思维,想象成m个人黏合长度为1的木棒。
参考解答:
def split(m, n, current):
if current >= n:
return 0
elif current < m:
return 1 + split(m, n, 2 * current)
elif current >= m:
return 1 + split(m, n, current + m)
def split2(m, n):
count = 0
current = 1
while current < n:
current += current if current < m else m
count += 1
return count