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