Изучение стробограмматических чисел: увлекательный числовой феномен

Вы когда-нибудь слышали о стробограмматических числах? Если нет, то вас ждет угощение! Стробограмматические числа — это увлекательное числовое явление, которое проявляет уникальное свойство при повороте на 180 градусов. Проще говоря, в перевернутом виде они выглядят одинаково. Например, число 609 является стробограмматическим, поскольку при его повороте оно по-прежнему отображается как 609.

В этой статье блога мы глубоко погрузимся в мир стробограмматических чисел, изучая различные методы их генерации и идентификации с помощью программирования. Так что пристегните ремни и готовьтесь к увлекательному путешествию!

Метод 1: подход грубой силы

Давайте начнем с простого, но эффективного метода генерации стробограмматических чисел. Мы можем перебрать все возможные числа в заданном диапазоне и проверить, удовлетворяет ли каждое число стробограмматическому свойству. Вот реализация Python:

def is_strobogrammatic(num):
    valid_pairs = {'0': '0', '1': '1', '6': '9', '8': '8', '9': '6'}
    rotated_num = ''.join([valid_pairs.get(digit, '') for digit in reversed(num)])
    return num == rotated_num
def generate_strobogrammatic_numbers(n):
    result = []
    for num in range(10(n-1), 10n):
        if is_strobogrammatic(str(num)):
            result.append(num)
    return result
# Example usage
print(generate_strobogrammatic_numbers(3))

Метод 2: рекурсивный подход

Еще один элегантный способ создания стробограмматических чисел — использование рекурсивного алгоритма. Мы начинаем с базового случая однозначных стробограмматических чисел (0, 1 и 8), а затем рекурсивно строим более крупные стробограмматические числа, добавляя допустимые пары на обоих концах. Вот реализация Python:

def find_strobogrammatic_numbers(n):
    return helper(n, n)
def helper(m, n):
    if m == 0:
        return ['']
    if m == 1:
        return ['0', '1', '8']

    result = []
    sub_numbers = helper(m - 2, n)

    for sub_number in sub_numbers:
        if m != n:
            result.append('0' + sub_number + '0')
        result.append('1' + sub_number + '1')
        result.append('6' + sub_number + '9')
        result.append('8' + sub_number + '8')
        result.append('9' + sub_number + '6')

    return result
# Example usage
print(find_strobogrammatic_numbers(3))

Метод 3: итеративный подход

Если вы предпочитаете итеративное решение, мы можем использовать два указателя для построения стробограмматических чисел от центра наружу. Мы начинаем с однозначных стробограмматических чисел и продолжаем расширять их, пока не достигнем желаемой длины. Вот реализация Python:

def generate_strobogrammatic_numbers(n):
    even_mid = ['11', '69', '88', '96', '00']
    odd_mid = ['0', '1', '8']

    if n == 1:
        return odd_mid

    if n % 2 == 0:
        results = even_mid
        start = 2
    else:
        results = odd_mid
        start = 1

    while start < n:
        new_results = []
        for result in results:
            if start != n - 1:
                new_results.append('1' + result + '1')
            new_results.append('6' + result + '9')
            new_results.append('8' + result + '8')
            new_results.append('9' + result + '6')
            if start != n - 1:
                new_results.append('0' + result + '0')
        results = new_results
        start += 2

    return results
# Example usage
print(generate_strobogrammatic_numbers(3))

Стробограмматические числа – это увлекательная математическая концепция, которая продолжает интриговать и очаровывать как математиков, так и программистов. В этой статье блога мы рассмотрели несколько методов создания и идентификации стробограмматических чисел с использованием грубой силы, рекурсии и итерации.

Независимо от того, являетесь ли вы любопытным энтузиастом или опытным программистом, эти методы предоставят вам инструменты для изучения и экспериментирования со стробограмматическими числами. Так что вперед, погрузитесь в мир стробограмматических чисел и раскройте секреты, скрытые в их числовой симметрии!