В настоящее время в процессе изучения Ruby/программирования в целом, и я столкнулся с этим вопросом:
Ваша задача построить здание, которое будет состоять из n кубиков. Куб внизу будет иметь объем
n^3
, куб выше будет иметь объем(n-1)^3
и так далее до вершины, которая будет иметь объем1^3
. Вам дан общий объемm
здания. Получивm
, сможете ли вы найти количествоn
кубиков, которое вам нужно построить? Параметром функцииfindNb(find_nb, find-nb)
будет целое числоm
, и вы должны вернуть целое числоn
, напримерn^3 + (n-1)^3 + ... + 1^3 = m
, если такоеn
существует, или-1
, если такогоn*
нет.
и вот моя попытка решить это:
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 (граница, очевидно, более строгая, чем эта, но это простая отправная точка ). Из-за этого вы знаете, что нет смысла искать значения n выше кубического корня из m. - person Linuxios   schedule 29.11.2016