[英]Ruby not incrementing number
我編寫了代碼,以查找在Collatz猜想下需要進行多少次運算的數字。 但是,我的操作變量似乎沒有增加。
我的代碼是:
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!"
如果需要更高的性能,請閱讀有關動態編程和備注技術的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.