Fizz Buzz – это классическая задача по программированию, которую часто используют на собеседованиях для оценки базовых навыков кандидата в программировании. Несмотря на свою простоту, к Fizz Buzz можно подходить по-разному, каждый из которых имеет свои особенности и преимущества. В этой статье мы рассмотрим несколько способов решения проблемы Fizz Buzz, используя разговорный язык и попутно предоставляя примеры кода.
Метод 1: наивный подход
Самый простой способ решить Fizz Buzz — перебрать диапазон чисел и проверить каждое из них по отдельности. Если число делится на 3, мы печатаем «Fizz». Если оно делится на 5, мы печатаем «Buzz». А если оно делится и на 3, и на 5, мы печатаем «Fizz Buzz». В противном случае мы просто печатаем само число.
def fizz_buzz_naive(n):
for i in range(1, n+1):
if i % 3 == 0 and i % 5 == 0:
print("Fizz Buzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
Метод 2: хитрый трюк по модулю
В этом подходе мы пользуемся тем фактом, что остаток от деления числа на 15 будет равен нулю тогда и только тогда, когда число делится и на 3, и на 5. используя оператор по модулю, мы можем упростить логику кода.
def fizz_buzz_modulo(n):
for i in range(1, n+1):
if i % 15 == 0:
print("Fizz Buzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
Метод 3: Мастер создания списков
Для тех, кто предпочитает лаконичный и элегантный код, на помощь приходит понимание списков. Этот метод создает список строк на основе условий Fizz Buzz, а затем объединяет их с помощью разрывов строк.
def fizz_buzz_list_comprehension(n):
fizz_buzz = ['Fizz Buzz' if i % 15 == 0 else 'Fizz' if i % 3 == 0 else 'Buzz' if i % 5 == 0 else str(i) for i in range(1, n+1)]
print('\n'.join(fizz_buzz))
Метод 4: энтузиаст побитовых операторов
Для технически подкованных программистов, которые любят манипуляции с битами, мы можем использовать побитовые операторы для проверки делимости на 3 и 5. Этот метод, возможно, не самый интуитивный, но он демонстрирует универсальность побитовых операций.
def fizz_buzz_bitwise(n):
for i in range(1, n+1):
fizz = (i & 3 == 0) # Equivalent to i % 3 == 0
buzz = (i & 12 == 0) # Equivalent to i % 5 == 0
if fizz and buzz:
print("Fizz Buzz")
elif fizz:
print("Fizz")
elif buzz:
print("Buzz")
else:
print(i)
В этой статье мы рассмотрели несколько методов решения проблемы Fizz Buzz, каждый из которых имеет свой подход и стиль кодирования. От наивного подхода до умного трюка по модулю, волшебства понимания списка и энтузиаста побитовых операторов, мы увидели, что существует множество способов решить эту, казалось бы, простую проблему. Понимая и экспериментируя с различными решениями, программисты могут улучшить свои навыки решения проблем и глубже понять концепции программирования.