0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FizzBuzz問題を解いた備忘録

Posted at

今日も学んだことを忘れない為にメモします。

FizzBuzz問題とは

英語圏の有名な言葉遊びである “Fizz Buzz” (フィズバズ)のルールをコンピュータプログラムに実装したもの。
ルールは、1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を言う。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz

与えられている仕様を整理すると以下のようになる。

・数字の1~100を出力する
・値が3の倍数のときだけ、"Fizz"という出力に置き換える
・値が5の倍数のときだけ、"Buzz"という出力に置き換える
・値が3と5の倍数のときだけ、"FizzBuzz"という出力に置き換える

記述内容

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
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

まずは、1〜100までの数字をターミナルに出力するためのプログラムを書く。
条件を指定して繰り返し処理をしたいので、whileメソッドを使う。
whileメソッドは条件式が真(true)の間は繰り返し実行される。

def fizz_buzz
  num = 1
  while num <= 100 do
    puts num

    num = num + 1
  end
end

次に"Fizz"、"Buzz"、"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

「3の倍数であるか」「5の倍数であるか」という条件式が先にあると「15の倍数であるか」が適用されなくなってしまい"Fizz"か"Buzz"が出力されてしまうので先に「15の倍数であるか」の条件式を書く。
「〇〇の倍数」を導き出す時は剰余演算子(%)を用いる。

以上になります。

最初はeach分で書いてみたのですが

def fizz_buzz
  (1..100).each do |n|
    if n % 15 == 0
      print "FizzBuzz"
    elsif n % 3 == 0
      puts "Fizz"
    elsif n % 5 == 0
      puts "Buzz"
    else
      puts n
    end
  end
end

fizz_buzz

結果としてはルール通り数字と"Fizz"、"Buzz"、"FizzBuzz"は出力できたのですがなぜか"FizzBuzz"の隣に次の数字が出てきました。

出力結果
FizzBuzz16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz31

どなたか理由がわかる方、ご教授ください。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?