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
     
    结果:

     

     
  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15610588.html
Copyright © 2011-2022 走看看