C++ で FizzBuzz ソリューションを実装する
この記事では、C++ で FizzBuzz ソリューションを実装する方法を紹介します。
C++ でリテラル値を使用した反復法を使用して FizzBuzz ソリューションを実装する
Fizz Buzz は、トレーニングサイトでのプログラミング演習や、場合によってはインタビューとして使用される些細な問題です。3
と 5
の倍数をそれぞれ Fizz
と Buzz
の文字列に置き換える必要があることを除いて、基本的には 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++ でカスタムクラスを使用して FizzBuzz ソリューションを実装する
または、指定された整数のマップと対応する文字列を格納するクラスを実装してから、組み込み関数を呼び出して値をコンソールに出力することもできます。この方法はより一般的であり、問題の定義を拡張するために使用できることに注意してください。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;
}