Изменения

Перейти к: навигация, поиск

Правильные скобочные последовательности

46 байт убрано, 03:33, 15 января 2012
Нет описания правки
''псевдокод'':
bool check(s):
pointer = 0
for (i = 1; i < length(s) + 1; i++):
Пусть нам известна строка $s$, представляющая собой правильную скобочную последовательность. Нам необходимо вывести следующую скобочную последовательность, а если ее нет, то - "No solution". Чтобы получить следующую скобочную последовательность надо найти минимальную:
bool next(s): pointer_close = 0 pointer_open = 0 for (i = length(s); i > 0; i--): if (s[i] == '('): pointer_open++ if (pointer_closed > pointer_open) break else pointer_closed++ delete(s, length(s) - pointer_open - pointer_closed + 1, pointer_closed + l) if (s = ''): return false s = s +')' for (j = 1; j > l + 1; j++): s = s + '(' for (j = 1; j > pointer_closed; j++): s = s + ')' return true
Если эта функция после выполнения выводит $true$ тогда надо напечатать полученную строку $s$, если $false$, то следует вывести "No solution".
Пусть нам известно число $n$. Надо вывести все правильные скобочные последовательности в лексикографическом порядке с $n$ открывающимися скобками:
void order (n)
s = ' ';
if (n == 0):
Анонимный участник

Навигация