1
0

More than 1 year has passed since last update.

本日のRuby基礎練習問題(22/3/11)

Last updated at Posted at 2022-03-11

本日のRuby基礎練習問題(22/3/11)

問題
FizzBuzz問題
1〜100までの数字をターミナルに出力してください。
ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、
3と5の倍数である「15の倍数」のときはFizzBuzzと出力してください。
プログラムのひな形は以下です。

question1.rb
def fizz_buzz
  # ここに処理を書き加えてください
end

fizz_buzz

ヒント
① 問題文で与えられている仕様を整理すると以下のようになります

数字の1~100を出力する
値が3の倍数のときだけ、"Fizz"という出力に置き換える
値が5の倍数のときだけ、"Buzz"という出力に置き換える
値が3と5の倍数のときだけ、"FizzBuzz"という出力に置き換える
②「〇〇の倍数」を導き出す時は剰余演算子を用いましょう

③条件を指定して繰り返し処理をする場合は、whileというメソッドを使いましょう

私の回答

qiita.erb
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ずつ増やす繰り返し処理を行う。

模範回答

qiita.erb
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までの数字をターミナルに出力するためのプログラムを書きます。

qiita.erb
def fizz_buzz
  num = 1
  while num <= 100 do
    puts num

    num = num + 1
  end
end

fizz_buzz

続いて、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzzと出力するようにします。

qiita.erb
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と出力する条件を追加します。

qiita.erb
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つのミスだけで出力エラーにつながるので、基本に忠実に記述することを意識したい。
また繰り返し処理は頻繁に使用されるのでしっかりと復習していこうと思う。

1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0