Implementar la solución Fizz Buzz en C++
- Utilice el método iterativo con valores literales para implementar la solución Fizz Buzz en C++
- Utilice la clase personalizada para implementar la solución Fizz Buzz en C++
Este artículo presentará cómo implementar la solución Fizz Buzz en C++.
Utilice el método iterativo con valores literales para implementar la solución Fizz Buzz en C++
Fizz Buzz es un problema trivial que se utiliza como ejercicio de programación en sitios de formación o incluso entrevistas a veces. Básicamente se reduce a imprimir los números del 1
al 100
en la consola, excepto que los múltiplos de 3
y 5
deben sustituirse por cadenas Fizz
y Buzz
, respectivamente. Además, existe una regla para múltiplos de 15
, que deben imprimirse como FizzBuzz
. La tarea se puede resolver con una simple declaración de bucle que itera a través del rango de 100 enteros y tiene condiciones if
para 4
casos diferentes. Tenga en cuenta que, para comprobar si el número es múltiplo del entero dado, se debe utilizar un operador de módulo - %
.
#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;
}
Producción :
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,
Utilice la clase personalizada para implementar la solución Fizz Buzz en C++
Alternativamente, podemos implementar una clase que almacene el mapa dado de enteros y cadenas correspondientes y luego llamar a la función incorporada para imprimir los valores en la consola. Tenga en cuenta que este método es más genérico y se puede utilizar para ampliar la definición del problema. La clase FizzBuzz
tiene un miembro de datos de tipo map<int, string>
y un constructor que toma una referencia a un mapa. checkFizzBuzz
no toma parámetros y ejecuta dos bucles anidados para verificar cada número en el rango de 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;
}
Otra forma de rediseñar la clase FizzBuzz
del código de ejemplo anterior es definir un constructor que tome una lista de inicializador de pares enteros / cadenas como el propio map
. La parte restante de la clase permanece sin cambios. También se podría agregar el miembro de datos COUNT
a la propia clase FizzBuzz
e inicializarlo usando el constructor para permitir al usuario pasar los diferentes números según sea necesario.
#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