Реализуйте FizzBuzz для 1..n
Реализуйте fizzBuzz(n), которая для каждого i от 1 до n печатает: Fizz для кратных 3, Buzz для кратных 5, FizzBuzz для кратных 15, иначе само число. Требование: кратное 15 должно печатать FizzBuzz (а не Fizz или Buzz) — проверяйте комбинированный случай до одиночных. O(n) по времени.
func fizzBuzz(n int) {
// ваш код здесь
}
Допишите реализацию.
Цикл i от 1 до n с бестеговым switch: проверьте i%15 == 0 → FizzBuzz первым, затем i%3 == 0 → Fizz, затем i%5 == 0 → Buzz, иначе печатайте i. Случай %15 должен быть первым, иначе i%3 совпадёт с кратными 15, и FizzBuzz не напечатается. O(n) по времени.
- ✗Проверять
i%3илиi%5доi%15, поэтомуFizzBuzzне печатается - ✗Считать, что
switchв Go по умолчанию проваливается в следующие case - ✗Забывать, что 15 — это НОК, который надо проверять первым
- →Почему
switchв Go останавливается на первом совпавшем case безfallthrough? - →Как сделать пары делитель/слово настраиваемыми вместо жёстко заданных?
Задача
Для i от 1 до n: печатать Fizz для кратных 3, Buzz для кратных 5, FizzBuzz для кратных 15, иначе само число.
func fizzBuzz(n int) {
for i := 1; i <= n; i++ {
switch {
case i%15 == 0:
fmt.Println("FizzBuzz")
case i%3 == 0:
fmt.Println("Fizz")
case i%5 == 0:
fmt.Println("Buzz")
default:
fmt.Println(i)
}
}
}
Почему %15 первым
Бестеговый switch в Go вычисляет case-ы сверху вниз и выполняет первый истинный, без fallthrough по умолчанию. Кратное 15 истинно для всех трёх условий, поэтому если поставить i%3 или i%5 выше i%15, сработает оно, и FizzBuzz никогда не напечатается.
15 — наименьшее общее кратное 3 и 5, поэтому самый специфичный случай должен идти первым.
⚠️ Разминочная задача, проверяющая чистый поток управления и понимание, что switch в Go не проваливается.