初学者によるプログラミングMemo #11 fizz,buzz問題
はじめに
今回は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は優位に立っていると言えます
Author And Source
この問題について(初学者によるプログラミングMemo #11 fizz,buzz問題), 我々は、より多くの情報をここで見つけました https://qiita.com/Ikuy_h/items/92d914de7d0dd8b41542著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .