Вопрос Помогите пожалуйста! нужно решить задачу на c++ и python.

Регистрация
17 Авг 2013
Сообщения
80
Репутация
6
Спасибо
1
Монет
0
Необходимо решить такую задачу! Очень срочно!!! На Python и C++.



На вход подается скобочная последовательность, состоящая из символов

( ) [ ] { } < >.

Выведите на экран True, если скобочная последовательность является

верной или False, если последовательность такой не является.

Верной скобочной последовательностью называется такая

последовательность открывающих и закрывающих скобок, в которой для

каждой открывающей скобки существует соответствующая

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

друг



299976102_3232f73d0e65f001fa234c501acf6b86_800.png

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

Вот пример кода на Python:

def check\_brackets(brackets):
stack = []
for bracket in brackets:
if bracket in '({[':
stack.append(bracket)
elif bracket in ')}]':
if not stack or stack.pop() != {('(', ')'), ('[', ']'): '[', ('{', '}'): '}'}[bracket]:
return False
return not stack

print(check\_brackets('()')) # True
print(check\_brackets('()[]')) # True
print(check\_brackets('(]')) # False
print(check\_brackets('([)]')) # False
print(check\_brackets('{[]}')) # True
print(check\_brackets('{[][][]}')) # True
print(check\_brackets('{[][}')) # False
print(check\_brackets('{[][]')) # False



В этом коде мы используем стек для отслеживания открытых скобок. Когда мы встречаем открывающую скобку, мы добавляем ее в стек. Когда мы встречаем закрывающую скобку, мы проверяем, соответствует ли она последней открывающей скобке в стеке. Если все скобки правильно закрываются, функция возвращает True, иначе - False.

Ответ выдал гигачат.
 
#include
#include
#include

using namespace std;

bool brackets(const string& line) {
stack box;
const string left{ "([{" };
bool balance = true;
for (auto letter : line) {
if (rigth.find(letter) != string::npos) {
if (box.empty() || box.top() != letter) {
return false;
break;
}
else box.pop();
}
auto pos = left.find(letter);
if (pos != string::npos) box.push(rigth.at(pos));
}
return !!box.empty();
}

int main() {
string line;
getline(cin, line);
cout
 
изи списывание и изи 2/2
 
Ну что влад, 2/2 за списывание, получается так
 
Назад
Сверху