版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yk_0311/article/details/82142316
问题描述:
假设要把长度为n 厘米的木棒切分为1 厘米长的小段,但是1 根木 棒只能由1 人切分,当木棒被切分为3 段后,可以同时由3个人分别切分木棒。 求最多有m 个人时,最少要切分几次。譬如n = 8,m = 3 时如下 图所示,切分 4 次就可以了
使用循环的方法
切分次数最少,那肯定是要每个人都去切,而且是从中间切。但是一根木棒又只能由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