簡體   English   中英

Ruby不增加數字

[英]Ruby not incrementing number

我編寫了代碼,以查找在Collat​​z猜想下需要進行多少次運算的數字。 但是,我的操作變量似乎沒有增加。

我的代碼是:

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 += 1number = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM