FizzBuzz問題の復習をば
問題
整数 N が入力として与えられます。
1からNまでの整数を1から順に表示してください。
ただし、表示しようとしている数値が、
・3の倍数かつ5の倍数のときには、”Fizz Buzz”
・3の倍数のときには、”Fizz”
・5の倍数のときには、”Buzz”
を数値の代わりに表示してください。
- 入力例
- 18
- 出力例2
-
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 Fizz
※ポイント
1.繰り返しを使う
2.繰り返しは基本0から始まってしまう
3.if文で各値を振り分けてあげる
4.0のとき判定がFizuBuzzと出力されてしまう
5.それをどうするか考える。
解答 範囲を使う場合(for inを使う)範囲オブジェクトの範囲分同じ処理を繰り返したり、配列の要素を順番に取得したい場合に使用するので
# Nを受け取る
n = gets.to_i
#範囲を作成する。(1から初めたいので)
m = (1..n)
for num in m do
if num % 15 == 0
puts "Fizz Buzz"
elsif num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
else puts num
end
end
puts
別解 uptoを使う場合(こっちのほうがいいかも)
# Nを受け取る
n = gets.to_i
1.upto(n) do |i|
if (i % 15).zero?
puts 'Fizz Buzz'
elsif (i % 3).zero?
puts 'Fizz'
elsif (i % 5).zero?
puts 'Buzz'
else
puts i
end
end
puts
別解2 eachを使う場合
# Nを受け取る(例:18)
n = gets.to_i
#範囲を作成する。(1から初めたいので)(中身1..18)
m = (1..n)
#eachで1から18まで18回繰り返してもろて各値をif文で振り分ける
m.each do |m|
if m % 15 == 0
puts "Fizz Buzz"
elsif m % 3 == 0
puts "Fizz"
elsif m % 5 == 0
puts "Buzz"
else puts m
end
end
