LoginSignup
0
0

More than 3 years have passed since last update.

初学者によるプログラミングMemo #11 fizz,buzz問題

Last updated at Posted at 2019-12-28

はじめに

今回はfizzbuzz問題についてすこしお話しします
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

目次

  • fizzbuzz問題
  • 注意点

fizzbuzz問題

fizzbuzz問題とは「1から100まで数を数える時に、3の倍数なら「fizz」、5の倍数なら「buzz」、そして15の倍数なら「fizzbuzz」、それ以外はその数を答える」というものです
なんか世界のナ○アツが似たようなことしていましたね
数え方としては「1,2,fizz,4,buzz...」と言った形ですね

これはプログラミング界隈で試験的な扱いになっているようです
色々と背景があるようですね
答えは一つではなく、色々な書き方があります

while文 その1

num = 1
while num <= 100

  if num%15 == 0
    puts "fizzbuzz!"
  elsif num%3 == 0
    puts "fizz!"
  elsif num%5 == 0
    puts "buzz!"
  else
    puts num
  end

  num += 1

end

これはnumが100以下の時にずっと繰り返す式です
まず15かどうかのフィルターにかけて、次に3かどうか、そして5かどうかを判断し、どれにも該当しなければelseを返します
%は割り算をして、あまりがあるかどうかを調べています
あまりがない場合、あまりは"0"、つまり"== 0"が成り立ちます

while文 その2

num = 1
while num < 101
  str = ""

  if num % 3 == 0
    str = str + "fizz"
  end
  if num % 5 == 0
    str = str + "buzz"
  end
  if str == ""
    str = str + num.to_s
  end

  puts str
  num += 1
end

elsifを使わないパターンです
今回は、"str"という変数を用いています
まず、前回同様割り算にてあまりがあるかどうかで判定します
この文の欠点は、"fizzbuzz!"にできず"fizzbuzz"か"fizz!buzz!"になる点です
コメント欄にそうならない方法を書いていただきました、ありがとうございます

### for文

for num in 1..100

  if num%15 == 0
    puts "fizzbuzz!"
  elsif num%3 == 0
    puts "fizz!"
  elsif num%5 == 0
    puts "buzz!"
  else
    puts num
  end

end

1行目でnumに1~100を順番に代入していきます
あとは一緒です

each文

(1..100).each do |num|

  if num%15 == 0
    puts "fizzbuzz!"
  elsif num%3 == 0
    puts "fizz!"
  elsif num%5 == 0
    puts "buzz!"
  else
    puts num
  end

end

each文で1~100を順番に並べます
あとは一緒です

times文 upto文

#1..100.times do |num| ←こちらは間違いです0〜99までの結果しか出ませんので修正します
1.upto(100) do |num|

  if num%15 == 0
    puts "fizzbuzz!"
  elsif num%3 == 0
    puts "fizz!"
  elsif num%5 == 0
    puts "buzz!"
  else
    puts num
  end

end

times文で1~100までを繰り返します
upto文で1~100までを繰り返します
あとは一緒です

注意点

3と5の判定順は入れ替えても問題ない(互いに素数のため)ですが、15の判定位置は記述位置でないといけません
先に約数である3,5の判定がなされた場合、そちらが優先されるからです
そういう点ではwhile文のその2は優位に立っていると言えます

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