Ruby不增加数字
我编写代码来查找Collatz猜想下需要的数字的操作数。但是,我的操作变量似乎并没有增加。Ruby不增加数字
我的代码是:
puts "Please input a number"
number = gets.chomp
number = number.to_i
operations = 0
modulo = number % 2
while number =! 1
if modulo == 0
number = number/2
operations = operations + 1
elsif modulo =! 0 && number =! 1
number = number * 3
number = number += 1
operations = operations + 2
else
puts "Uh oh, something went wrong."
end
end
puts "It took #{operations} operations!"
我上https://www.repl.it运行此代码。
首先,它是elsif
;不是elseif
(我编辑了你的问题)。不等号是!=
;不是=!
。但是这有一个不同的含义。 (即:number =! 1
表示number = !1
)
在第12行中,number = number += 1
是什么?我想你的意思是number += 1
或number = number + 1
。
现在,代码有效。 :)
这是最终版本。
puts "Please input a number"
number = gets.chomp
number = number.to_i
operations = 0
modulo = number % 2
while number != 1
if modulo == 0
number = number/2
operations = operations + 1
elsif modulo != 0 && number != 1
number = number * 3
number = number + 1
operations = operations + 2
else
puts "Uh oh, something went wrong."
end
end
puts "It took #{operations} operations!"
使用方法:
Please input a number
256
It took 8 operations!
的最佳解决方案的功能:
def collatz(n)
if n % 2 == 0
return n/2
else
return 3*n + 1
end
end
def chainLength(num)
count = 1
while num > 1
count += 1
num = collatz(num)
end
return count
end
puts "Please input a number"
number = gets.chomp
number = number.to_i
operations = chainLength(number)
puts "It took #{operations} operations!"
如果需要更高的性能,了解动态规划和记忆化技术。
非常感谢!关于如何优化速度的任何想法? – jBit
@jBit根据您的要求编辑。请注意,这是基于我的旧Python代码之一的仓促翻译。 – Wickramaranga
谢谢你的所有帮助 – jBit
您是否收到任何错误? – Wickramaranga
我想@Wickramaranga,会回答你的问题。你的代码只有一些语法错误。 (例如[elseif => elsif],[number = number + = 1 => number + = 1] ...) –