C++ で FizzBuzz ソリューションを実装する

胡金庫 2023年10月12日
C++
  1. C++ でリテラル値を使用した反復法を使用して FizzBu​​zz ソリューションを実装する
  2. C++ でカスタムクラスを使用して FizzBu​​zz ソリューションを実装する
C++ で FizzBuzz ソリューションを実装する

この記事では、C++ で FizzBu​​zz ソリューションを実装する方法を紹介します。

C++ でリテラル値を使用した反復法を使用して FizzBu​​zz ソリューションを実装する

Fizz Buzz は、トレーニングサイトでのプログラミング演習や、場合によってはインタビューとして使用される些細な問題です。35 の倍数をそれぞれ FizzBuzz の文字列に置き換える必要があることを除いて、基本的には 1 から 100 までの数字をコンソールに出力することになります。さらに、15 の倍数のルールがあり、FizzBuzz として出力する必要があります。このタスクは、100 整数の範囲を反復処理し、4 の異なるケースに対して if 条件を含む単純なループステートメントで解決できます。数値が指定された整数の倍数であるかどうかを確認するには、モジュラス演算子-%を使用する必要があることに注意してください。

#include <iostream>

using std::cout;
using std::endl;

constexpr int COUNT = 100;

int main() {
  for (int i = 1; i <= COUNT; ++i) {
    if (i % 3 == 0)
      cout << "Fizz, ";
    else if (i % 5 == 0)
      cout << "Buzz, ";
    else if (i % 15 == 0)
      cout << "FizzBuzz, ";
    else
      cout << i << ", ";
  }

  return EXIT_SUCCESS;
}

出力:

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

C++ でカスタムクラスを使用して FizzBu​​zz ソリューションを実装する

または、指定された整数のマップと対応する文字列を格納するクラスを実装してから、組み込み関数を呼び出して値をコンソールに出力することもできます。この方法はより一般的であり、問​​題の定義を拡張するために使用できることに注意してください。FizzBuzz クラスには、タイプ map<int, string> のデータメンバーが 1つと、マップへの参照を取得するコンストラクターがあります。checkFizzBuzz はパラメータを受け取らず、2つのネストされたループを実行して、1-100 の範囲の各数値をチェックします。

#include <iostream>
#include <map>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

constexpr int COUNT = 100;

class FizzBuzz {
  map<int, string> table;

 public:
  explicit FizzBuzz(map<int, string> &init) : table(std::move(init)) {}

  void checkFizzBuzz() {
    for (int i = 1; i <= COUNT; ++i) {
      for (const auto &item : table) {
        i % item.first == 0 ? cout << item.second << ", " : cout << i << ", ";
        break;
      }
    }
  }
};

int main() {
  map<int, string> init = {{3, "Fizz"}, {5, "Buzz"}, {15, "FizzBuzz"}};

  FizzBuzz fii(init);
  fii.checkFizzBuzz();

  return EXIT_SUCCESS;
}

前のサンプルコードから FizzBuzz クラスを再設計する別の方法は、map 自体のような整数/文字列ペアの初期化リストを受け取るコンストラクターを定義することです。クラスの残りの部分は変更されません。COUNT データメンバーを FizzBuzz クラス自体に追加し、コンストラクターを使用して初期化して、ユーザーが必要に応じて異なる番号を渡せるようにすることもできます。

#include <initializer_list>
#include <iostream>
#include <map>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

constexpr int COUNT = 100;

class FizzBuzz {
  map<int, string> table;

 public:
  FizzBuzz(std::initializer_list<std::pair<int, string>> init) {
    for (const auto &item : init) {
      table.insert(item);
    }
  }

  void checkFizzBuzz() {
    for (int i = 1; i <= COUNT; ++i) {
      for (const auto &item : table) {
        i % item.first == 0 ? cout << item.second << ", " : cout << i << ", ";
        break;
      }
    }
  }
};

int main() {
  FizzBuzz fii = {{3, "Fizz"}, {5, "Buzz"}, {15, "FizzBuzz"}};

  fii.checkFizzBuzz();

  return EXIT_SUCCESS;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook