Implementa la soluzione Fizz Buzz in C++

Jinku Hu 12 ottobre 2023
C++
  1. Usa il metodo iterativo con valori letterali per implementare la soluzione Fizz Buzz in C++
  2. Usa la classe personalizzata per implementare la soluzione Fizz Buzz in C++
Implementa la soluzione Fizz Buzz in C++

Questo articolo introdurrà come implementare la soluzione Fizz Buzz in C++.

Usa il metodo iterativo con valori letterali per implementare la soluzione Fizz Buzz in C++

Fizz Buzz è un banale problema utilizzato come esercizio di programmazione sui siti di formazione o anche nelle interviste a volte. Si tratta essenzialmente di stampare i numeri da 1 a 100 sulla console, tranne per il fatto che i multipli di 3 e 5 dovrebbero essere sostituiti rispettivamente con le stringhe Fizz e Buzz. Inoltre, esiste una regola per i multipli di 15, che dovrebbero essere stampati come FizzBuzz. L’attività può essere risolta con una semplice istruzione di bucle che itera attraverso l’intervallo di 100 interi e contiene condizioni if per 4 diversi casi. Si noti che, per verificare se il numero è multiplo dell’intero dato, si dovrebbe utilizzare un operatore modulo - %.

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

Produzione:

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,

Usa la classe personalizzata per implementare la soluzione Fizz Buzz in C++

In alternativa, possiamo implementare una classe che memorizzi la data mappa di interi e le stringhe corrispondenti e quindi chiamare la funzione built-in per stampare i valori sulla console. Si noti che questo metodo è più generico e può essere utilizzato per espandere la definizione del problema. La classe FizzBuzz ha un membro dati di tipo map<int, string> e un costruttore che prende un riferimento a una mappa. checkFizzBuzz non accetta parametri ed esegue due cicli annidati per controllare ogni numero nell’intervallo 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;
}

Un altro modo per riprogettare la classe FizzBuzz dal codice di esempio precedente è definire un costruttore che accetta un elenco di inizializzatori di coppie intere/stringa come map stesso. La parte restante della classe rimane invariata. Si potrebbe anche aggiungere il membro dati COUNT alla classe FizzBuzz stessa e inizializzarlo utilizzando il costruttore per consentire all’utente di passare i diversi numeri secondo necessità.

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