FizzBuzz問題(Ruby)

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です