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