Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с с++ ПРОШУ

Лейла Нуриева Ученик (90), открыт 3 недели назад
По данному числу n выведите все правильные скобочные последовательности из круглых и квад- ратных скобок длины n. Придерживайтесь следующего порядка скобок: «([)]» (см. тест из условия)
2 ответа
Евгений Чудаков Знаток (340) 3 недели назад
#include <iostream>
#include <string>

void generate_sequences(int n, int open_round, int close_round, int open_square, int close_square, std::string sequence) {
// Если длина последовательности равна n, проверяем её и выводим, если она корректная
if (sequence.length() == n) {
if (open_round == close_round && open_square == close_square) {
std::cout << sequence << std::endl;
}
return;
}

// Добавляем открывающую круглую скобку, если это допустимо
if (open_round < n / 2) {
generate_sequences(n, open_round + 1, close_round, open_square, close_square, sequence + "(");
}

// Добавляем закрывающую круглую скобку, если это допустимо
if (close_round < open_round) {
generate_sequences(n, open_round, close_round + 1, open_square, close_square, sequence + ")");
}

// Добавляем открывающую квадратную скобку, если это допустимо
if (open_square < n / 2) {
generate_sequences(n, open_round, close_round, open_square + 1, close_square, sequence + "[");
}

// Добавляем закрывающую квадратную скобку, если это допустимо
if (close_square < open_square) {
generate_sequences(n, open_round, close_round, open_square, close_square + 1, sequence + "]");
}
}

void generate_bracket_sequences(int n) {
// Проверяем, что n четное, иначе не можем создать правильную скобочную последовательность
if (n % 2 != 0) {
std::cout << "Невозможно создать правильную скобочную последовательность нечетной длины" << std::endl;
return;
}

generate_sequences(n, 0, 0, 0, 0, "");
}

int main() {
int n;
std::cout << "Введите длину последовательности: ";
std::cin >> n;
generate_bracket_sequences(n);
return 0;
}
Лейла НуриеваУченик (90) 3 недели назад
спасибо, но первый тест не проходит
Входные данные

4
Результат работы

(())
([])
()()
()[]
[()]
[[]]
[]()
[][]
Евгений Чудаков Знаток (340) Лейла Нуриева, отредактировал
Евгений ЧудаковЗнаток (340) 3 недели назад
сейчас попробуем по другому
Юрий Семыкин Искусственный Интеллект (204925) 3 недели назад
То есть числа Каталана. Вот статья внятная https://habr.com/ru/articles/165295/
Удобная формула
С(1)=1
С(n)=2*(2*n-1)*C(n-1)/(n+1)
Похожие вопросы