все нулевые последовательности, где одни не находятся рядом друг с другом

77
6

Я должен написать процедуру, которая для каждого заданного n> 0 записывает каждую одиночную последовательность 1-1 длины n, где 1 не может сидеть рядом с любым другим.

Например: для n = 3 выход:

000, 001, 010, 100, 101

Я думал о рекурсии, но в этом случае не вижу никакого использования.

Любые подсказки будут высоко оценены.

спросил(а) 2018-01-13T00:27:00+03:00 3 года, 6 месяцев назад
1
Решение
78

Просто исключите результат, который имеет последовательные 1s. Ниже приведен пример кода Java:

public class Test0 {
public static void main (String [] args) {
int n = 4;
for(int i = 0; i < Math.pow(2,n); i++) {

if ( (i & (i << 1)) != 0 )
continue;
System.out.println( i/8 % 2 + "" + i/4 % 2 + "" + i/2 % 2 + "" + i % 2);
}
}
}

Если есть два последовательных 1s, выражение i & (i << 1)) приведет к ненулевому, иначе 0.

ответил(а) 2018-01-13T01:32:00+03:00 3 года, 6 месяцев назад
78

Поскольку вы попросили намек, и вы упомянули рекурсию, здесь рекурсивный намек:


0 -> can precede either 1 or 0
-> 01
-> 00

1 -> can precede 0
-> 10

01 -> 010
00 -> 000
001
10 -> 100
101

ответил(а) 2018-01-13T01:33:00+03:00 3 года, 6 месяцев назад
63

Рекурсивное решение Python:

def rec(n,a=''):
if len(a)==n:
print a
return
rec(n,a+'0')
if len(a)==0 or a[-1]!='1':
rec(n,a+'1')

rec(3)

печатает:

000
001
010
100
101

Теорема Цекендорфа на самом деле получается, что n ^ -й член в этой последовательности равен представлению Зеекендорфа (который выражает числа в терминах членов Фибоначчи) числа n. Это объясняет, почему количество вариантов определяется числами Фибоначчи.

ответил(а) 2018-01-13T01:32:00+03:00 3 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема