Implementieren der Fizz Buzz-Lösung in C++
- Verwenden Sie die iterative Methode mit Literalwerten, um die Fizz Buzz-Lösung in C++ zu implementieren
- Verwenden Sie eine benutzerdefinierte Klasse, um die Fizz Buzz-Lösung in C++ zu implementieren
In diesem Artikel wird die Implementierung der Fizz Buzz-Lösung in C++ vorgestellt.
Verwenden Sie die iterative Methode mit Literalwerten, um die Fizz Buzz-Lösung in C++ zu implementieren
Fizz Buzz ist ein triviales Problem, das als Programmierübung auf Schulungsseiten oder manchmal sogar in Interviews verwendet wird. Es läuft im Wesentlichen darauf hinaus, die Zahlen von 1
bis 100
an die Konsole zu drucken, außer dass die Vielfachen von 3
und 5
durch Fizz
bzw. Buzz
ersetzt werden sollten. Zusätzlich gibt es eine Regel für Vielfache von 15
, die als FizzBuzz
ausgedruckt werden soll. Die Aufgabe kann mit einer einfachen Schleifenanweisung gelöst werden, die durch den 100-ganzzahligen Bereich iteriert und if
-Bedingungen für 4
verschiedene Fälle enthält. Beachten Sie, dass, um zu überprüfen, ob die Zahl ein Vielfaches der gegebenen ganzen Zahl ist, man einen Modul-Operator verwenden sollte - %
.
#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;
}
Ausgabe:
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,
Verwenden Sie eine benutzerdefinierte Klasse, um die Fizz Buzz-Lösung in C++ zu implementieren
Alternativ können wir eine Klasse implementieren, die die gegebene Karte von Ganzzahlen und entsprechenden Strings speichert, und dann die integrierte Funktion aufrufen, um die Werte an die Konsole zu drucken. Beachten Sie, dass diese Methode allgemeiner ist und verwendet werden kann, um die Problemdefinition zu erweitern. Die Klasse FizzBuzz
hat ein Datenelement vom Typ map<int, string>
und einen Konstruktor, der eine Referenz auf eine Karte annimmt. checkFizzBuzz
verwendet keine Parameter und führt zwei verschachtelte Schleifen aus, um nach jeder Zahl im Bereich von 1-100
zu suchen.
#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;
}
Eine andere Möglichkeit, die Klasse FizzBuzz
aus dem vorherigen Beispielcode umzugestalten, besteht darin, einen Konstruktor zu definieren, der eine Initialisierungsliste von Integer/String-Paaren wie map
selbst übernimmt. Der restliche Teil der Klasse bleibt unverändert. Man könnte auch das Datenelement COUNT
zur Klasse FizzBuzz
selbst hinzufügen und es mit dem Konstruktor initialisieren, damit der Benutzer die verschiedenen Zahlen nach Bedarf übergeben kann.
#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;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook