所以假设我给 13 作为 n,代码应该返回 36,因为 36 是最不完美的平方,当它与 13 相加时得到 49,这是一个完美的平方。现在,当我将 4 作为 n 时,它应该返回 -1,因为添加到所有数字的 4 没有完美的平方,因此它什么都不返回。该代码无需添加 elsif 即可工作,但这意味着如果我传入 4,它将返回范围。但是一旦我添加了 elsif,它仍然会打印出范围。
def solve n
arr = (1..10).each do |i|
i = (i**2) + n
if (Math.sqrt(i) % 1) == 0
return i - n
elsif false
return -1
end
end
arr
end
p solve(13) #= 36
# # because 36 is the smallest perfect square that can be added to 13 to form a perfect square => 13 + 36 = 49
p solve(3) #= 1 # 3 + 1 = 4, a perfect square
p solve(12) #= 4 # 12 + 4 = 16, a perfect square
p solve(9) #= 16
p solve(4) #= -1
最佳答案
问题是你的代码永远不会进入 elsif
分支,这就是你在迭代后得到 (1..10)
范围的原因,因为那是值 arr
成立,因为在检查 (Math.sqrt(i) % 1) == 0
后没有返回值。
如果在迭代期间没有显式返回,您可以只返回 -1:
def solve n
(1..10).each do |i|
i = (i**2) + n
return i - n if (Math.sqrt(i) % 1).zero?
end
-1
end
solve(3) # 1
solve(12) # 4
solve(9) # 16
solve(4) # -1
关于ruby - 下面的代码应该返回最不完美的平方,当添加到它时,总和也是一个完美的平方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62588425/