Вопрос задан 11.04.2021 в 20:28. Предмет Информатика. Спрашивает Зимина Анастасия.

Python Определите количество последовательностей из нулей и единиц длины (длина — это общее

количество нулей и единиц), в которых никакие три единицы не стоят рядом. Вводится натуральное число , не превосходящее 40. Выведите количество искомых последовательностей. Гарантируется, что ответ не превосходит 231 − 1.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Березный Данила.
x = (input("Введіть число з 0 и 1:"))
nul = []
one = []
new = x.split('0')
nul.append(new)
newn = x.split('1')
one.append(newn)
print(nul)
print(one)
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения данной задачи можно использовать динамическое программирование. Пусть dp[i] - количество последовательностей длины i, в которых никакие три единицы не стоят рядом. Тогда можно записать рекуррентное соотношение:

dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

Объяснение этого соотношения следующее: чтобы получить последовательность длины i, не содержащую трех единиц подряд, можно взять последовательность длины i-1 и добавить в конец 0, или взять последовательность длины i-2 и добавить в конец 01, или взять последовательность длины i-3 и добавить в конец 001.

Изначально dp[0] = 1, dp[1] = 2, dp[2] = 4 (это можно проверить вручную). Далее можно заполнить массив dp[i] для i от 3 до n, где n - данное натуральное число. Ответом на задачу будет dp[n].

В Python код для решения этой задачи будет выглядеть следующим образом:

python
n = int(input()) dp = [1, 2, 4] + [0] * (n-2) for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] + dp[i-3] print(dp[n])

Этот код заполняет массив dp и выводит ответ на задачу. Сложность этого алгоритма O(n), так как требуется пройти по массиву dp от 3 до n. Время выполнения этого алгоритма для n=40 составит около 1 миллисекунды.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос