【问题标题】:Bisectional Search: In case of a tie, return lower value二分搜索:如果是平局,则返回较低的值
【发布时间】:2020-06-20 07:25:23
【问题描述】:

我正在努力学习期中考试并且正在努力解决这个问题。问题是这样的:

求整数指数使得base**exponent 最接近num。 请注意base**exponent 可能大于或小于num。 在平局的情况下,返回较小的值。 除了在平局的情况下如何返回较小的值之外,我已经得到了一切。

这是我的代码,函数closest_power(3,12)保持在指数 3 和 2 之间(正确的代码将返回 2)。非常感谢任何帮助

def closest_power(base, num):
    exponential = base+num/2
    increment = 1
    while  abs(num-base**exponential) >= 0.01:
        print ("Exp: {}, Our number = {}, correct number: {}".format(exponential,base**exponential, num))
        if num > (num-base**exponential-2) and num <  (num-base**exponential):
            return expontential-1

        if base**exponential > num:
            exponential -= 1

        else:
            exponential += 1


    return exponential

print(closest_power(3,12))

【问题讨论】:

    标签: python python-3.x algorithm loops


    【解决方案1】:

    您对num 是否在两个指数之间的测试不正确,应该是

    num > base**(exponential-1) and num < base**exponential
    

    也可以写成

    base**(exponential-1) < num < base**exponential
    

    你还有错别字,

    return expontential-1
    

    应该是

    return exponential-1
    

    你应该将起始值设置为

    exponential = (base + num) // 2
    

    确保它是一个整数,但将其设置为:

    exponential = num // base
    

    总共:

    def closest_power(base, num):
        exponential = num // base
        increment = 1
        while  abs(num-base**exponential) >= 0.01:
            print ("Exp: {}, Our number = {}, correct number: {}".format(exponential,base**exponential, num))
            if base**(exponential-1) < num < base**exponential:
                return exponential-1
    
            if base**exponential > num:
                exponential -= 1
    
            else:
                exponential += 1
    
    
        return exponential
    
    print(closest_power(3,12))
    

    输出:

    Exp: 4, Our number = 81, correct number: 12
    Exp: 3, Our number = 27, correct number: 12
    2
    

    【讨论】:

      【解决方案2】:

      您可以使用日志来简化您的问题。

      你的问题是 3**x = 12。找到 x?

      应用日志

      x*log3 = log12

      x = log12/log3

      使用这种方法:

      def exp(x,y):
         return(int(log(y)/log(x)))
      

      【讨论】:

      • 这很顺利
      • int(log_base(num)) 不一定是最接近的答案。例如,如果 num=15 和 base=4,那么您的函数返回 1,但正确答案是 2。但是,您可以计算 int(log_base(num))int(log_base(num))+1 并选择最佳匹配,
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2018-09-09
      相关资源
      最近更新 更多