C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++入門】FizzBuzz問題の実装方法と解法をわかりやすく解説

この記事では、FizzBuzz問題の実装方法とその種類について詳しく解説します。

FizzBuzzとは?

FizzBuzzは、プログラミング学習の定番として知られるシンプルな問題です。1から100までの数字を出力する際に、3の倍数を「Fizz」に、5の倍数を「Buzz」に置き換えて表示します。

具体例

1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'Fizz Buzz', 16, 17, 'Fizz', 19, 'Buzz',....

解法のアプローチ

この問題を解く最もシンプルな方法は、1から100までのループ処理を行い、各反復ごとに以下の2つの条件を順番にチェックすることです。

  • 条件1: iが3で割り切れる場合は「Fizz」に置き換える。
  • 条件2: iが5で割り切れる場合は「Buzz」に置き換える。

どちらの条件にも当てはまらない場合は、そのまま数字を出力します。また、3と5の両方で割り切れる値(15の倍数)については、「Fizz Buzz」と出力します。

C++による実装例

以下は、上記の解法をC++で実装したサンプルプログラムです。

#include <iostream>
using namespace std;

int main(){

    for (int i=1; i<=100; i++){

        if (i%15 == 0)
            cout<<"Fizz Buzz,\t";
        else if ((i%3) == 0)
            cout<<"Fizz,\t";
        else if ((i%5) == 0)
            cout<<"Buzz,\t";
        else
            cout<<i<<",\t";
    }
    return 0;
}

実行結果

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22,
23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43,
44, Fizz Buzz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, Fizz Buzz, 61, 62, Fizz,
64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, Fizz Buzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz,
Buzz, 86, Fizz, 88, 89, Fizz Buzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz,

FizzBuzz問題の主なバリエーション

FizzBuzzは、プログラマーの論理的思考力を確認するために、採用面接などでもよく使われる定番のプログラミング問題です。時代とともに、より難易度の高い派生版も数多く生まれてきました。ここでは、代表的なバリエーションをいくつか紹介します。

  • 桁ベースのFizzBuzz − 倍数の判定の代わりに、数字の中に「3」や「5」という桁が含まれているかどうかでFizz Buzzへの置き換えを行うバリエーションです。

    例 − 1, 2, Fizz(3), 4, Buzz(5), 6, 7, 8, 9, 10, 11, 12, Fizz(13), 14, Buzz(15), 16, 17, 18, 19, 20, 21, 22, Fizz(23), 24, Buzz(25), 26, 27, 28, 29, Fizz(30), Fizz(31), Fizz(32), Fizz(33), Fizz(34), Fizz Buzz(35),...

  • Fizz Buzz Woof − 次の素数である7に対して「Woof」という単語を追加したバリエーションです。3、5、7という3つの約数に対して置き換えを行います。

    例 − 1, 2, Fizz(3), 4, Buzz(5), Fizz(6), Woof(7), 8, Fizz(9), Buzz(10), 11, Fizz(12), 13, Woof(14), Buzz(15), 16, 17, Fizz(18), 19, Buzz(20), Fizz Woof(21), 22, 23, Fizz(24), Buzz(25), 26, Fizz Woof(27), Woof(28), 29, Buzz(30), 31, 32, Fizz(33), 34, Fizz Buzz woof(35)...

  • 他の基数でのFizzBuzz − 問題を少し複雑にするために、別の基数に変更して行うバリエーションもあります。

    例 − 16進数に変更した場合: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, B, Fizz, D, E, Fizz Buzz, 11, Fizz,....

  • 複数のバリエーションの組み合わせ − 2つ以上のバリエーションを組み合わせることで、さらに難易度を高めることも可能です。例えば、約数と桁の両方を考慮してFizz Buzzへの置き換えを行う問題などが挙げられます。

  1. C++で配列を実装した二分木

    二分木は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右子および左子と呼ばれます。 単純な二分木は-です 木を表現するには、2つの方法があります。 リンクリストを使用する動的ノード表現 配列を使用する順次表現。 ここでは、二分木の配列表現について説明します。このために、BTのノードに番号を付ける必要があります。この番号付けは、0から(n-1)または1からnまで開始できます。 配列内のノードとその親ノードおよび子ノードの位置を導き出します。 0インデックスベースのシーケンスを使用する場合 親ノードがインデックスpであ

  2. C++で作るマトリックス風・文字が降り注ぐエフェクトの実装方法

    映画『マトリックス』などでおなじみの、緑色の文字が画面を流れ落ちるあの演出。実はC++の標準ライブラリだけでも、コンソール上に簡単に再現できます。この記事では、乱数・スレッド・スリープ処理を組み合わせて、マトリックス風の「文字が降り注ぐエフェクト」を実装する方法を解説します。 実装のポイント この演出を実現するには、次の3つの要素を押さえておく必要があります。 マトリックスの幅を定義する … 1行に表示する最大桁数(画面幅)を決めます。 文字の間隔をランダムにする … 隣り合う文字どうしの隙間は一定である必要はありません。ランダム性を持たせることで、自然でノイズ感のある演出になります。 表