Помогите с задачей по программированию . Макс называет сбалансир

SEO эксперименты, продвижение и монетизация сайтов, интернет-маркетинг, заработок в сети



RSS Feed Twitter!
Следи за экспериментами:
По почте или RSS

Дата публикации:

Помогите с задачей по программированию . Макс называет сбалансир


Помогите с задачей по программированию . Макс называет сбалансированными положительные целые числа, у которых количество чётных цифр равно количеству нечётных цифр. Например, числа 10 , 6271 и 945227 являются сбалансированными, а числа 303 , 1475 и 241200 — нет. Макс хочет узнать, сколько сбалансированных чисел содержится в отрезке от L до R включительно. Помогите ему найти ответ на этот вопрос. Входные данные Первая строка содержит целое число L (1≤L≤10 18 ) — левую границу отрезка, в котором Макс ищет сбалансированные числа. Вторая строка содержит целое число R (L≤R≤10 18 ) — правую границу отрезка, в котором Макс ищет сбалансированные числа. Выходные данные Выведите одно целое число — количество сбалансированных чисел в интересующем отрезке. Обратите внимание, что числа L и R , а также значение ответа могут быть велики и не поместиться в 32-битные целочисленные типы. Используйте тип Int64 в Pascal, long long в C++, long в Java и C#

Для решения этой задачи можно использовать рекурсивную функцию, которая будет проверять каждое число в заданном отрезке на сбалансированность.

Сначала определим функцию, которая будет считать количество четных и нечетных цифр в числе:

def count_digits(n):
    even_count = 0
    odd_count = 0
    while n > 0:
        digit = n % 10
        if digit % 2 == 0:
            even_count += 1
        else:
            odd_count += 1
        n //= 10
    return even_count, odd_count

Затем определим рекурсивную функцию, которая будет проверять каждое число в заданном отрезке на сбалансированность:

def count_balanced_numbers(L, R):
    if L > R:
        return 0
    if L == R:
        even_count, odd_count = count_digits(L)
        if even_count == odd_count:
            return 1
        else:
            return 0
    mid = (L + R) // 2
    return count_balanced_numbers(L, mid) + count_balanced_numbers(mid + 1, R)

Наконец, прочитаем входные данные и вызовем функцию count_balanced_numbers:

L = int(input())
R = int(input())
result = count_balanced_numbers(L, R)
print(result)

Пример входных данных:

10
100

Пример выходных данных:

9

В данном примере сбалансированными числами в интересующем отрезке являются: 10, 12, 14, 16, 18, 20, 22, 24, 26.