JuniorКодЧастоЕщё не отвечали
Вариант FizzBuzz: Foo для /2, Bar для /3, Buzz для /6
Для каждого целого от 1 до n выведите метку, дописывая: Foo, если число делится на 2; Bar, если делится на 3; Buzz, если делится на 6. Если ничего не подходит, выведите само число.
Требования:
- Дописывайте накопительно, поэтому 6 (делится на все три) печатает
FooBarBuzz. - Уточните это правило с интервьюером до написания кода.
void fizzbuzz(int n) {
// ваш код здесь
}
Допишите реализацию.
Цикл i от 1 до n, заводим пустую строку, дописываем Foo при i % 2 == 0, Bar при i % 3 == 0, Buzz при i % 6 == 0. Если строка осталась пустой — печатаем i, иначе печатаем строку. Поскольку правила дописывают, число, кратное 6, даёт FooBarBuzz.
- ✗Использовать else-if, из-за чего значение получает только одну метку вместо дописывания всех подходящих
- ✗Не уточнить, печатает ли кратное 6 «FooBarBuzz» или только «Buzz»
- ✗Забыть напечатать число, когда ни одно правило не подошло
- →Как переписать без явного цикла, через функциональный map?
- →Почему правило
% 6избыточно, если% 2и% 3уже дописывают?
Оглавление
Задача
Для чисел от 1 до n напечатайте накопительную метку (Foo/Bar/Buzz) или само число.
Решение
#include <string>
#include <iostream>
void fizzbuzz(int n) {
for (int i = 1; i <= n; ++i) {
std::string res;
if (i % 2 == 0) res += "Foo";
if (i % 3 == 0) res += "Bar";
if (i % 6 == 0) res += "Buzz"; // делится на все три → FooBarBuzz
if (res.empty()) res = std::to_string(i);
std::cout << res << '\n';
}
}
Ключевые моменты
- Метки дописываются, а не выбираются взаимоисключающе — 6 даёт
FooBarBuzz. - Число печатается лишь когда строка осталась пустой.
- Главный сигнал на собеседовании — кандидат уточняет правило для кратных 6.
Оглавление