Implementieren der Fizz Buzz-Lösung in C++

Jinku Hu 12 Oktober 2023
C++
  1. Verwenden Sie die iterative Methode mit Literalwerten, um die Fizz Buzz-Lösung in C++ zu implementieren
  2. Verwenden Sie eine benutzerdefinierte Klasse, um die Fizz Buzz-Lösung in C++ zu implementieren
Implementieren der Fizz Buzz-Lösung in C++

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;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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