本日のRuby基礎練習問題(22/3/11)
問題
FizzBuzz問題
1〜100までの数字をターミナルに出力してください。
ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、
3と5の倍数である「15の倍数」のときはFizzBuzzと出力してください。
プログラムのひな形は以下です。
def fizz_buzz
# ここに処理を書き加えてください
end
fizz_buzz
ヒント
① 問題文で与えられている仕様を整理すると以下のようになります
数字の1~100を出力する
値が3の倍数のときだけ、"Fizz"という出力に置き換える
値が5の倍数のときだけ、"Buzz"という出力に置き換える
値が3と5の倍数のときだけ、"FizzBuzz"という出力に置き換える
②「〇〇の倍数」を導き出す時は剰余演算子を用いましょう
③条件を指定して繰り返し処理をする場合は、whileというメソッドを使いましょう
私の回答
def fizz_buzz
x = 1
while x <= 100
if x % 3 == 0 && x % 5 == 0
puts "FizzBuzz"
elsif x % 3 == 0
puts "Fizz"
elsif x % 5 == 0
puts "Buzz"
else
puts x
x += 1
end
end
end
fizz_buzz
解説
まずxに1を代入します。
そしてWhileメソッドで1~100までの繰り返し処理を記述します。
もし3の倍数かつ5の倍数=15の倍数である場合は、"FizzBuzz"と出力し、
3の倍数の場合は"Fizz"と出力し、
5の倍数の場合は"Buzz"と出力し、
それ以外はxを出力する。
その後xに1をプラスすることで1ずつ増やす繰り返し処理を行う。
模範回答
def fizz_buzz
num = 1
while num <= 100 do
if num % 15 == 0
puts "FizzBuzz"
elsif num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
else
puts num
end
num = num + 1
end
end
fizz_buzz
模範解説
この問題は条件分岐と条件の組み合わせを利用し、実装します。その実装の流れの一例を紹介します。
まずは、1〜100までの数字をターミナルに出力するためのプログラムを書きます。
def fizz_buzz
num = 1
while num <= 100 do
puts num
num = num + 1
end
end
fizz_buzz
続いて、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzzと出力するようにします。
def fizz_buzz
num = 1
while num <= 100 do
if num % 3 == 0 # 3の倍数のとき
puts "Fizz"
elsif num % 5 == 0 # 5の倍数のとき
puts "Buzz"
else # それ以外のとき
puts num
end
num = num + 1
end
end
fizz_buzz
そしてここに「15の倍数(3と5の倍数)」の時についての条件式を追加します。しかし、このまま下に追加してしまうと上記4行目の「3の倍数であるか」または6行目の「5の倍数であるか」という条件式が真になり、FizzまたはBuzzと表示されてしまいます。
したがって、if文の最初に「15の倍数」のときはFizzBuzzと出力する条件を追加します。
def fizz_buzz
num = 1
while (num <= 100) do
if num % 15 == 0 # 15の倍数のとき
puts "FizzBuzz"
elsif (num % 3) == 0 # 3の倍数のとき
puts "Fizz"
elsif (num % 5) == 0 # 5の倍数のとき
puts "Buzz"
else # それ以外のとき
puts num
end
num = num + 1
end
end
fizz_buzz
別解としては、「15の倍数であるとき」の条件式をnum % 15 == 0からnum % 3 == 0 && num % 5 == 0のように置き換えることができます。
感じたこと
条件分岐が完全に終了した後に+1を記述するところだけ間違えた。
細かい箇所だが1つのミスだけで出力エラーにつながるので、基本に忠実に記述することを意識したい。
また繰り返し処理は頻繁に使用されるのでしっかりと復習していこうと思う。