Implémenter la solution Fizz Buzz en C++

Jinku Hu 12 octobre 2023
C++
  1. Utiliser la méthode itérative avec des valeurs littérales pour implémenter la solution Fizz Buzz en C++
  2. Utiliser une classe personnalisée pour implémenter la solution Fizz Buzz en C++
Implémenter la solution Fizz Buzz en C++

Cet article présentera comment implémenter la solution Fizz Buzz en C++.

Utiliser la méthode itérative avec des valeurs littérales pour implémenter la solution Fizz Buzz en C++

Fizz Buzz est un problème trivial utilisé comme exercice de programmation sur des sites de formation ou même parfois d’interviews. Cela revient essentiellement à imprimer les nombres de 1 à 100 sur la console, sauf que les multiples de 3 et 5 doivent être remplacés par les chaînes Fizz et Buzz, respectivement. De plus, il existe une règle pour les multiples de 15, qui doivent être imprimés sous la forme FizzBuzz. La tâche peut être résolue avec une instruction de boucle simple qui parcourt la plage de 100 entiers et contient des conditions if pour 4 cas différents. Notez que, pour vérifier si le nombre est multiple de l’entier donné, il faut utiliser un opérateur de module - %.

#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;
}

Production:

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,

Utiliser une classe personnalisée pour implémenter la solution Fizz Buzz en C++

Alternativement, nous pouvons implémenter une classe qui stocke la carte donnée d’entiers et de chaînes correspondantes, puis appeler la fonction intégrée pour imprimer les valeurs sur la console. Notez que cette méthode est plus générique et peut être utilisée pour étendre la définition du problème. La classe FizzBuzz a une donnée membre de type map<int, string> et un constructeur qui prend une référence à une carte. checkFizzBuzz ne prend aucun paramètre et exécute deux boucles imbriquées pour vérifier chaque nombre dans la plage 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;
}

Une autre façon de reconcevoir la classe FizzBuzz à partir de l’exemple de code précédent consiste à définir un constructeur qui prend une liste d’initialisation de paires entier/chaîne comme map lui-même. Le reste de la classe reste inchangé. On pourrait également ajouter le membre de données COUNT à la classe FizzBuzz elle-même et l’initialiser à l’aide du constructeur pour permettre à l’utilisateur de passer les différents nombres selon ses besoins.

#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;
}
Auteur: 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