ruby - 下面的代码应该返回最不完美的平方,当添加到它时,总和也是一个完美的平方

标签 ruby

所以假设我给 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/

相关文章:

ruby-on-rails - 未定义方法 `<<' 为 nil :NilClass got this error while merging instance variables

ruby-on-rails - 无方法错误 : undefined method `email' for nil:NilClass : can't send email with devise/sendgrid(Rails 3. 2)

ruby - Sinatra 请求对象

ruby - 续集中的 default_scope

ruby-on-rails - 如果设置了 graphQL 字段方法参数默认值,则使用 RSpec 进行测试

ruby - 在 case 语句中使用类对象

ruby - 创建工厂对象时传递一个 id

ruby - 从外部方法跳过 Ruby 迭代器

ruby-on-rails - rails : "bundle install" failed because of old rails version(3. 2)

ruby - 自动测试、RSpec 2 和 Ruby 1.9.2-p0 - 完全没有输出