Гид по технологиям

FizzBuzz: решение и примеры на 5 языках

• 4 min read • Программирование • Обновлено 10 Dec 2025
FizzBuzz: примеры на 5 языках
FizzBuzz: примеры на 5 языках

Иллюстрация задачи FizzBuzz — последовательность чисел и замен на слова

TL;DR

FizzBuzz — простая задача для собеседований: напечатать числа от 1 до 100, заменяя кратные 3 на “Fizz”, кратные 5 на “Buzz”, а кратные и 3, и 5 (то есть 15) на “FizzBuzz”. В статье приведены реализаци и выводы для C++, Python, JavaScript, Java и C, советы для интервьюера и кандидата, альтернативные подходы и тесты приёмки.

О задаче

Вам нужно написать программу, которая выводит числа от 1 до 100 с правилами:

  • Если число кратно 3, вывести “Fizz” вместо числа.
  • Если число кратно 5, вывести “Buzz” вместо числа.
  • Если число кратно и 3, и 5, вывести “FizzBuzz” вместо числа.

Подсказка: проверку кратности выполняют с помощью оператора остатка от деления (%) — например, 25 % 5 == 0.

Подход к решению

Классический и понятный подход:

  1. Запустить цикл от 1 до 100.
  2. Сначала проверить кратность 15 (оба условия одновременно). Если да — вывести “FizzBuzz”.
  3. Иначе проверить кратность 3 — вывести “Fizz”.
  4. Иначе проверить кратность 5 — вывести “Buzz”.
  5. Иначе вывести само число.

Порядок проверок важен: сначала 15, затем 3 и 5 по отдельности.

Псевдокод

for number from 1 to 100:
  if number % 15 == 0:
    print("FizzBuzz")
  elif number % 3 == 0:
    print("Fizz")
  elif number % 5 == 0:
    print("Buzz")
  else:
    print(number)

C++

Ниже — простой вариант на C++:

// C++ program to implement the FizzBuzz problem
#include 
using namespace std;

int main()
{
  for (int i = 1; i <= 100; i++)
  {
    if (i % 15 == 0)
    {
      cout << "FizzBuzz" << " ";
    }
    else if (i % 3 == 0)
    {
      cout << "Fizz" << " ";
    }
    else if (i % 5 == 0)
    {
      cout << "Buzz" << " ";
    }
    else
    {
      cout << i << " ";
    }
  }
  return 0;
}

Вывод:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz

Python

Простой, читаемый вариант на Python:

# Python program to implement the FizzBuzz problem
for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz", end="  ")
    elif i % 3 == 0:
        print("Fizz", end="  ")
    elif i % 5 == 0:
        print("Buzz", end="  ")
    else:
        print(i, end="  ")

Вывод совпадает с предыдущим.

JavaScript

В браузере можно использовать document.write или консоль:

// JavaScript program to implement the FizzBuzz problem
for (let i = 1; i <= 100; i++) {
  if (i % 15 == 0) {
    document.write("FizzBuzz" + " ");
  } else if (i % 3 == 0) {
    document.write("Fizz" + " ");
  } else if (i % 5 == 0) {
    document.write("Buzz" + " ");
  } else {
    document.write(i + " ");
  }
}

Java

Пример на Java:

// Java program to implement the FizzBuzz problem
public class Main
{
  public static void main(String args[])
  {
    for (int i = 1; i <= 100; i++)
    {
      if (i % 15 == 0)
      {
        System.out.print("FizzBuzz" + " ");
      }
      else if (i % 3 == 0)
      {
        System.out.print("Fizz" + " ");
      }
      else if (i % 5 == 0)
      {
        System.out.print("Buzz" + " ");
      }
      else
      {
        System.out.print(i + " ");
      }
    }
  }
}

C

Ниже — версия на чистом C:

// C program to implement the FizzBuzz problem
#include 

int main()
{
  for (int i = 1; i <= 100; i++)
  {
    if (i % 15 == 0)
    {
      printf("FizzBuzz ");
    }
    else if (i % 3 == 0)
    {
      printf("Fizz ");
    }
    else if (i % 5 == 0)
    {
      printf("Buzz ");
    }
    else
    {
      printf("%d ", i);
    }
  }
  return 0;
}

Когда этот подход не годится

  • Для нецелых чисел (дробные шаги или вещественные значения) проверка остатка неприменима напрямую.
  • Если требуется форматированный вывод (по одному значению в строке) — следует менять разделитель/формат вывода.
  • При очень больших N (миллионы и выше) нужно учитывать скорость и вывод в поток (буферизация).

Альтернативные подходы

  • Использовать строки и объединения: для каждого числа формировать строку result = ‘’ + (i%3==0? ‘Fizz’ : ‘’) + (i%5==0? ‘Buzz’ : ‘’) и выводить result || i.
  • Функциональные методы: map/reduce в JS или списковые включения в Python.
  • Предвычисление: пометить шаги кратности и избежать операций деления для ускорения в tight loops.

Ментальные модели и эвристики

  • “Сначала самые узкие условия”: проверяем 15 перед 3 и 5.
  • Подумайте о замене численного теста на булевы флаги (is3, is5) и объединении вывода — это упрощает расширение правил.

Чек-лист для интервьюера

  • Попросить кандидата объяснить почему проверка %15 должна быть первой.
  • Проверить рабочий код и граничные случаи (1, 3, 5, 15, 100).
  • Оценить чистоту кода и альтернативные решения (однострочники, функциональные решения).

Чек-лист для кандидата

  • Объяснить подход вслух перед кодированием.
  • Начать с псевдокода, затем написать минимально рабочую реализацию.
  • Протестировать вручную несколько ключевых значений.

Критерии приёмки (тесты)

  • Вход: 1..100. Ожидаемый вывод содержит “Fizz” на позициях кратных 3, “Buzz” на позициях кратных 5, “FizzBuzz” на позициях кратных 15.
  • Граничные тесты: i=1 -> “1”; i=3 -> “Fizz”; i=5 -> “Buzz”; i=15 -> “FizzBuzz”; i=100 -> “Buzz”.
  • Негативный тест: убедиться, что числа, не кратные 3 или 5, выводятся как числа.

Короткая шпаргалка (one-liners)

  • Python: print(‘ ‘.join(‘FizzBuzz’ if i%15==0 else ‘Fizz’ if i%3==0 else ‘Buzz’ if i%5==0 else str(i) for i in range(1,101)))
  • JavaScript: console.log(Array.from({length:100},(_,i)=> {i++; return i%15==0? ‘FizzBuzz’: i%3==0? ‘Fizz’: i%5==0? ‘Buzz’: i}).join(‘ ‘))
  • C++/C/Java: классический цикл for с % проверками.

Decision flowchart

flowchart TD
  A[Начать: i = 1..100] --> B{i % 15 == 0}
  B -- Да --> C[Вывести 'FizzBuzz']
  B -- Нет --> D{i % 3 == 0}
  D -- Да --> E[Вывести 'Fizz']
  D -- Нет --> F{i % 5 == 0}
  F -- Да --> G[Вывести 'Buzz']
  F -- Нет --> H[Вывести i]
  C --> I[Следующее i]
  E --> I
  G --> I
  H --> I
  I --> B

Глоссарий (одна строка)

  • Modulo (%): операция остатка от деления, используется для проверки кратности.

Короткое резюме

FizzBuzz — простая, но полезная задача для проверки базовых навыков программирования: циклов, условий и корректности мышления. Реализации на пяти языках дают понятное сравнение стиля и краткости. Для собеседований полезно обсуждать альтернативы и граничные случаи.

Важно

  • Начиная с проверки %15, вы избегаете выдачи “Fizz” или “Buzz” вместо “FizzBuzz”.
  • Для production-подобных задач думайте о масштабируемости вывода и буферизации.

Краткое напутствие

Если вы новичок — реализуйте задачу в том языке, который изучаете. Если вы интервьюер — просите объяснить выбор порядка проверок и предложить оптимизацию.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро