C++에서 Fizz Buzz 솔루션 구현

Jinku Hu 2023년10월12일
C++
  1. 리터럴 값과 함께 반복 방법을 사용하여 C++에서 Fizz Buzz 솔루션 구현
  2. 커스텀 클래스를 사용하여 C++에서 Fizz Buzz 솔루션 구현
C++에서 Fizz Buzz 솔루션 구현

이 기사에서는 C++로 Fizz Buzz 솔루션을 구현하는 방법을 소개합니다.

리터럴 값과 함께 반복 방법을 사용하여 C++에서 Fizz Buzz 솔루션 구현

Fizz Buzz는 교육 사이트에서 프로그래밍 연습이나 때로는 인터뷰에 사용되는 사소한 문제입니다. 35의 배수가 각각FizzBuzz문자열로 대체되어야한다는 점을 제외하고는 본질적으로1에서100까지의 숫자를 콘솔에 인쇄하는 것으로 요약됩니다. 또한15의 배수에 대한 규칙이 있으며FizzBuzz로 인쇄되어야합니다. 이 작업은 100 정수 범위를 반복하고4다른 케이스에 대한if조건을 포함하는 간단한 루프 문으로 해결할 수 있습니다. 숫자가 주어진 정수의 배수인지 확인하려면 모듈러스 연산자 인%를 사용해야합니다.

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

출력:

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,

커스텀 클래스를 사용하여 C++에서 Fizz Buzz 솔루션 구현

또는 주어진 정수 맵과 해당 문자열을 저장하는 클래스를 구현 한 다음 내장 함수를 호출하여 값을 콘솔에 인쇄 할 수 있습니다. 이 방법은보다 일반적이며 문제 정의를 확장하는 데 사용할 수 있습니다. FizzBuzz클래스에는map<int, string>유형의 데이터 멤버 하나와 맵에 대한 참조를 사용하는 생성자가 있습니다. checkFizzBuzz는 매개 변수를 취하지 않고 두 개의 중첩 루프를 실행하여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;
}

이전 예제 코드에서FizzBuzz클래스를 재 설계하는 또 다른 방법은map자체와 같은 정수 / 문자열 쌍의 이니셜 라이저 목록을 사용하는 생성자를 정의하는 것입니다. 수업의 나머지 부분은 변경되지 않습니다. 또한COUNT데이터 멤버를FizzBuzz클래스 자체에 추가하고 생성자를 사용하여 초기화하여 사용자가 필요에 따라 다른 번호를 전달할 수 있습니다.

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