zoukankan      html  css  js  c++  java
  • Python练习(Q4) 切分木头

    题目:(题目来源:程序员的算法趣题)

    假设要把长度为n厘米的木棒切分为1厘米长的小段,但是每段木棒只能由1人切分,当木棒切分为3段,可以由3人同时分别切分各段。求最多m个人时,最少要经过几轮才能完成切割。(具体意义需要参考图片,否则容易有异议!)

    比如说n=8, m=3时,分4轮切分即可。第1轮,由1个人将原始木棒切分为两段;第2轮(此时有2段木棒),由2个人同时它们切分为共4段;第3轮(此时有4段木棒),由3人分别对其中3段进行切分操作;第4轮(此时还剩1段木棒需要切分),由1人将最后剩下的1段切分为2段。

     思想转化一下,比如上面8个数字,不管如何,一定要砍(8-1)刀才能独立出每个数字,题目的意思就是转换到:第一次只能砍1刀,第二次砍2刀,第三次往后都最多能砍3刀,问一共几次可以砍够刀数,即累计的砍刀次数》=总的需要砍刀次数,这里是(8-1);

    上代码:、

    import numpy as np
    import datetime
    
    def CutWood(num,knife_count=3):   
        need_cut_time=num-1
        time=0
        infactcut=0
        while(infactcut<=need_cut_time):        
            time=time+1
            if(time==1):
               infactcut=infactcut+1
            elif(time==2):
                infactcut=infactcut+2
            else:
                infactcut=infactcut+knife_count    
        return time
    print("*"*50)
    start = datetime.datetime.now()
    cuttime=CutWood(100,5)   
    end = datetime.datetime.now()  
    spendtime=end-start 
    print("CutWood(100,5) Total Cut time:=")
    print(cuttime) 
    print("CutWood(100,5) Spend time:{}".format(spendtime.microseconds))  
    print("*"*50)    
    print("*"*50)
    start = datetime.datetime.now()
    cuttime=CutWood(20)   
    end = datetime.datetime.now()  
    spendtime=end-start 
    print("CutWood(20)   Total Cut time:=")
    print(cuttime) 
    print("CutWood(20) Spend time:{}".format(spendtime.microseconds))  
    print("*"*50)   
    View Code
     
    结果:

     

     
  • 相关阅读:
    bzoj 1858 线段树
    bzoj 1877 最小费用流
    bzoj 1833 数位dp
    Codeforces Round #285 (Div. 1) B
    HDU2028 Lowest Common Multiple Plus
    HDU5706 GirlCat
    HDU2022 海选女主角
    687E: TOF
    687D: Dividing Kingdom II
    687D: Dividing Kingdom II
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15610588.html
Copyright © 2011-2022 走看看