🐠

今さら聞けない【FizzBuzz】(javascript編)

2021/11/20に公開

FizzBuzzとは

数字を1から100まで順番に出力していき
・3の倍数の時「 Fizz 」
・5の倍数の時「 Buzz 」
・3かつ5の倍数の時「 FizzBuzz 」を表示させる

※それ以外の値はそのまま表示

今回はjavascriptで解いてみます!

詳しく解説しているので、是非読んでみて下さい!

<解答>

※色んなパターンの解答例があります。

for( let i = 1; i <= 100; i ++ ) {
  if( i % 15 === 0 ) {
    console.log( "FizzBuzz" );
   } else if ( i % 5 === 0 ) {
     console.log( "Buzz" );
   } else if ( i % 3 === 0 ) {
     console.log( "Fizz" );
   } else {
     console.log( i );
   }
 }
#結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
・
・
・

<解説>

4つポイントがあるので1つずつ解説していきます!

➀:1〜100までの数字を繰り返す「反復処理」

➁:倍数をどのようにすれば求められるか

➂:コードの処理は「上から順に」実行される

➃:もし数値が〇〇なら△△する「条件分岐」


➀:1〜100までの数字を繰り返す「反復処理」

簡潔に書ける「for文」を使います!

for ( let i = 1; i <= 100; i ++ ) {
    処理
}

let i = 1; (変数の定義:iを定義する)
i <= 100;  (条件式:100まで)
i ++     (変数の更新:i += 1の省略形)


➁:倍数をどのようにすれば求められるか

・3の倍数=3で割れば「余り」が0になる

・3かつ5の倍数=15の最小公倍数

※最小公倍数とは・・・
小学生で習いましたよね(笑)0以外の複数の整数の公倍数で、
その中でも一番小さい数を最小公倍数と言います。

3と5の最小公倍数を例にすると
3の倍数は「3,6,9,12,15,18...」、5の倍数は「5,10,15,20...」

3と5の倍数で共通している数で一番小さい数は「15」
つまり、最小公倍数は15です。

a % b === 0   ( a を b で割った余りが0に等しい )

i % 3 === 0  ( 3の倍数 )
i % 15 === 0   ( 15の倍数 )


➂:コードの処理は「上から順に」実行される

上から順に処理されます。条件分岐の順番には注意です!

ここでのポイントは15の倍数( i % 15 === 0 )を一番最初の条件にする事です!
仮に、最初のif文に3の倍数( i % 3 === 0 )の条件を記述すると、
条件を満たしその先の処理は実行されなくなるからです。5の倍数も然りです。 
なので、if文は条件が厳しいものから順番に書くのがいいです!


➃:もし数値が〇〇なら△△する「条件分岐」

if文〜条件分岐を使います。

if ( 条件式A ) {
  条件式Atrueの時
} else if ( 条件式B ) {
  条件式Afalseで、条件式Btrueの時
} else {
  条件式A,Bどちらもfalseの時
}

まとめ

for ( let i = 1;  i <= 100;  i ++ ) {
 ※「 i 」を定義し、1100まで「 i 」を+1ずつ足すのを繰り返す

 if( i % 15 === 0 ) {
  console.log( "FizzBuzz" );
 ※もし「 i 」が15の倍数であれば「 FizzBuzz 」を出力

 } else if ( i % 5 === 0 ) {
  console.log( "Buzz" );
 ※もし「 i 」が15の倍数でなく5の倍数であれば「 Buzz 」を出力

 } else if ( i % 3 === 0 ) {
  console.log( "Fizz" );
 ※もし「 i 」が155の倍数ではなく3の倍数であれば「 Fizz 」を出力

 } else {
  console.log( i );
 ※どれにも当てはまらなければ「 i 」を出力
 }
}

以上です!

FizzBuzzを理解できれば、if文、for文、三項演算子の仕組みもわかってきますね!

私も最初は理解するのに苦労しましたが、

意外と基本的な部分多いので1つずつ噛み砕いて、アルゴリズムを理解していくのが良いと思います!

もし、ご指摘やこういう方法もあるよという方はコメントかDMお待ちしております!

最後まで読んで頂きありがとうございました( ˆoˆ )/

Discussion