【发布时间】:2017-04-12 22:28:02
【问题描述】:
目前在学习Ruby/编程的过程中,我遇到了这个问题:
你的任务是建造一座由 n 个立方体组成的建筑物。底部的立方体的体积为
n^3,上面的立方体的体积为(n-1)^3,依此类推,直到顶部的体积为1^3。 您将获得建筑物的总体积m。得到m,你能找到你必须建造的立方体数量n吗? 函数findNb(find_nb, find-nb)的参数将是一个整数m,如果存在这样的n,则必须返回整数n,例如n^3 + (n-1)^3 + ... + 1^3 = m;如果不存在这样的n*,则必须返回-1。
这是我解决这个问题的尝试:
def find_nb(m)
(1..Float::INFINITY).each do |n|
if (1..n).inject(0) {|sum, value| sum + value**3} == m
return p n
else
next
end
end
end
这似乎适用于我知道会起作用的输入,例如:
find_nb(4183059834009)
find_nb(135440716410000)
find_nb(40539911473216)
我需要帮助的领域:
-
我不知道当没有满足等式的
n的值并因此输出-1的输入时,我该如何理解find_nb(24723578342962) 非常感谢任何有关如何使现有代码更好的提示。
【问题讨论】:
-
答案已经涵盖了大部分要点,但我认为值得重申的是,在问题本身中寻找优化是很重要的。既然你知道
n^3 + (n - 1)^3 + ...和等于m,你就知道n^3不能大于m(界限显然比这更严格,但它是一个简单的起点)。因此,您知道在 m 的立方根之上搜索 n 值是没有意义的。
标签: ruby algorithm optimization enumerable