算法趣题Q4:切分木棒

问题描述:
假设要把长度为n 厘米的木棒切分为1 厘米长的小段,但是1 根木 棒只能由1 人切分,当木棒被切分为3 段后,可以同时由3个人分别切分木棒。 求最多有m 个人时,最少要切分几次。譬如n = 8,m = 3 时如下 图所示,切分 4 次就可以了

算法趣题Q4:切分木棒_第1张图片

使用循环的方法
切分次数最少,那肯定是要每个人都去切,而且是从中间切。但是一根木棒又只能由1人切分,那么还需要切的前提下,根据木棒根数bars 和 人数m 的关系就会有存在两种情况:

1.木棒根数bars > 人数m:

每人都要切一根木棒,一次切好后可多出m根木棒,即bars –> bars+m 根木棒

2.木棒根数bars < 人数m:

bars根木棒那只能由bars个人切,一次切好后多出bars跟木棒,即bars –>2 * bars 根木棒

那如何确定不用再切了呢?

当木棒数bars>=原木棒长度n即可。
参考的博文:
https://ask.hellobi.com/blog/jasmine3happy/11331

代码:

def cut(m, n):  # m代表切割的人数,n代表木棒的长度
    count = 0
    current_bars = 1  # 代表木棒的数目
    while n > current_bars:  # 当木棒的长度大于木棒的数目时
        if m > current_bars:
            current_bars = current_bars * 2
        else:
            current_bars = current_bars + m
        count = count + 1
    print(count)

cut(3, 9)

结果:

4

你可能感兴趣的:(算法趣题)