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

Питон задача скобки решить

Алиса Смирнова Ученик (89), открыт 3 дня назад
Ваша задача - исправить скобки так, чтобы все открывающие и закрывающие скобки (квадратные скобки) имели соответствующие им аналоги. Вы сделаете это, добавив скобки в начало или конец строки.
Результат должен быть минимальной длины. Не добавляйте ненужные скобки.
Входными данными будет строка различной длины, содержащая только символы «(» и/или «)».
5 ответов
Свежий Тёплый Хлебушек Искусственный Интеллект (196466) 3 дня назад
Алиса у тебя получится ты главное верь в себя
YaGPT Знаток (334) 3 дня назад
Чтобы решить эту задачу, нужно определить, сколько открывающих и закрывающих скобок необходимо добавить, чтобы сделать строку сбалансированной.

Мы можем пройти по строке и вести подсчет открывающих скобок и недостающих закрывающих скобок. Затем на основе этих подсчетов мы сможем добавить недостающие скобки в начало или конец строки.

Вот пример программы на Python, которая решает эту задачу:

def balance_parentheses(s):
# Инициализируем счетчики
open_count = 0 # количество открывающих скобок
close_needed = 0 # количество недостающих закрывающих скобок

# Проходим по каждому символу в строке
for char in s:
if char == '(':
open_count += 1 # увеличиваем счетчик открывающих скобок
elif char == ')':
if open_count > 0:
open_count -= 1 # сбалансируем скобки
else:
close_needed += 1 # увеличиваем количество недостающих закрывающих скобок

# open_count теперь содержит количество лишних открывающих скобок
# close_needed содержит количество недостающих закрывающих скобок
return '(' * close_needed + s + ')' * open_count

# Пример использования
input_string = "(()())(()"
result = balance_parentheses(input_string)
print(result) # Вывод исправленной строки


### Объяснение кода:
1. Мы инициализируем два счетчика: open_count, который будет отслеживать количество открывающих скобок, и close_needed, который будет отслеживать количество недостающих закрывающих скобок.
2. Пробегаем через строку. Если встречаем (, увеличиваем open_count. Если встречаем ), проверяем, есть ли у нас открывающие скобки, которые можно закрыть:
- Если есть, уменьшаем open_count.
- Если нет, увеличиваем close_needed.
3. В конце мы собираем строку, добавляя недостающие закрывающие скобки в конец строки и недостающие открывающие скобки в начало.
4. Возвращаем сбалансированную строку.

Таким образом, программа решает задачу минимальным количеством добавленных скобок.
Анонимус Мудрец (16042) 3 дня назад
 def fix_brackets(s): 
if not s: # Обработка пустой строки
return "Input string is empty. No brackets to fix."

open_count = 0 # Счетчик открывающих скобок
close_count = 0 # Счетчик закрывающих скобок

for char in s:
if char == '(':
open_count += 1
elif char == ')':
if open_count > 0:
open_count -= 1
else:
close_count += 1

# Добавляем закрывающие скобки в конец и открывающие в начало
return '(' * close_count + s + ')' * open_count

def count_brackets(s):
open_count = s.count('(')
close_count = s.count(')')
return open_count, close_count

def are_brackets_balanced(s):
balance = 0
for char in s:
if char == '(':
balance += 1
elif char == ')':
balance -= 1
if balance < 0:
return False
return balance == 0

def incorrect_bracket_count(s):
open_count = 0
close_count = 0
incorrect = 0

for char in s:
if char == '(':
open_count += 1
elif char == ')':
if open_count > 0:
open_count -= 1
else:
incorrect += 1

incorrect += open_count # Оставшиеся открывающие скобки также неверные
return incorrect

def formatted_output(s):
fixed = fix_brackets(s)
open_count, close_count = count_brackets(s)
balanced = are_brackets_balanced(s)
incorrect_count = incorrect_bracket_count(s)

result = (
f"Original string: {s}\n"
f"Fixed string: {fixed}\n"
f"Open brackets: {open_count}, Close brackets: {close_count}\n"
f"Are brackets balanced? {'Yes' if balanced else 'No'}\n"
f"Incorrect bracket count: {incorrect_count}"
)
return result

# Пример использования
input_string = "(()))"
result = formatted_output(input_string)
print(result)
Вертолётов 625 Мудрец (13288) 3 дня назад
Код:
 def balance_brackets(s: str) -> str: 
balance = 0 # Текущий баланс скобок
additions_start = 0 # Количество дополнительных открывающих скобок, которые нужно добавить в начало
additions_end = 0 # Количество дополнительных закрывающих скобок, которые нужно добавить в конец

for char in s:
if char == '(':
balance += 1
elif char == ')':
balance -= 1

# Если balance отрицательный, значит есть недостающая открывающая скобка
if balance < 0:
additions_start += 1
balance = 0

# В конце balance будет количеством недостающих закрывающих скобок
additions_end = balance

# Формируем новую строку с добавленными скобками
new_string = '(' * additions_start + s + ')' * additions_end
return new_string

# Запрос ввода у пользователя
input_string = input("Введите строку с круглыми скобками: ")

# Обработка введенной строки
balanced_string = balance_brackets(input_string)
print(f"Строка после добавления недостающих скобок: {balanced_string}")
Похожие вопросы