2016-08-15 11 views
-1

Collat​​z推測で必要な操作の数を調べるためのコードを記述しました。しかし、私の操作変数は増加していないようです。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にこのコードを実行しています。

+0

エラーが発生していますか? – Wickramaranga

+0

私は@Wickramarangaは、あなたの質問に答えると思います。コードの構文エラーがあります。 (例:[elseif => elsif]、[number = number + = 1 => number + = 1] ...) –

答えて

2

まず、それはelsifです。 elseifではありません(私はあなたの質問でそれを編集しました)。不等号は!=です。 =!ではありません。しかし、それはやや異なる意味を持っています。 (すなわち、number =! 1number = !1を意味します)

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!" 

あなたはより高いパフォーマンスが必要な場合は、技術に関する動的計画メモ化をお読みください。

+0

ありがとうございました!どのように速度を最適化するための任意のアイデア? – jBit

+0

@jBitあなたの要求に応じて編集されました。私の古いPythonコードの1つに基づく急いで翻訳されていることに注意してください。 – Wickramaranga

+0

ご協力ありがとうございます – jBit

関連する問題