【问题标题】:Introduction to python optimizationpython优化介绍
【发布时间】:2018-09-23 06:53:13
【问题描述】:

问题陈述:

建造一座由 n 个立方体组成的建筑物。底部的立方体的体积为 n^3,上面的立方体的体积为 (n-1)^3,依此类推,直到顶部的体积为 1^3。

给定建筑物的总体积 m。给定m,你能找到你必须构建的立方体数量吗?

函数findNb (find_nb, find-nb, findNb)的参数是一个整数m,你必须返回整数n,例如n^3 + (n-1)^3 + ... + 1 ^3 = m 如果存在这样的 n 或 -1 如果不存在这样的 n。

以下代码在数学上是正确的,并且会计算出正确的值,但在代码战上提交时会失败。该消息说,如果在他们的服务器上执行超过 12 秒,则需要更多优化。感谢您的帮助。

def find_nb(m):
# your code
    n = int(m**(1./3.))
    #print (n)
    total_volume = 0
    for i in range (1,n+1):
      #print (i*i*i)
      total_volume+= i*i*i
      #print (total_volume)
      if(total_volume == m):
        #print (i)
        return i
        break
return -1

【问题讨论】:

    标签: python optimization


    【解决方案1】:

    你应该尝试使用一些数学。通常,k=1 到 n 的 k^3 之和为 (n(n+1)/2)^2。 所以

    def find_nb(m):
        i=0
        while int((i(i+1)/2)**2) < m:
            i += 1
        if ((i(i+1)/2)^2) == m:
            return(i)
    return(-1)
    

    这可能不是最好的解决方案,但您应该尝试一下,因为它可以避免循环。

    【讨论】: