Назовём скобочную последовательность, состоящую из трёх видов скобок (круглых, квадратных или фигурных) , если она может быть построена по следующим правилам:
пустая последовательность является правильной.
если
a
— правильная скобочная последовательность, то
{
a
}
,
[
a
]
и
(
a
)
— правильные скобочные последовательности.
если
a
и
b
— правильная скобочная последовательность, то
a
b
— правильная скобочная последовательность.
иначе говоря, правильная скобочная последовательность получается, если мы берём какое-то выражение с корректно расставленными скобками и убираем оттуда всё, кроме скобок.
вам дана скобочная последовательность длины
n
. вам разрешено вставлять скобки в любое место последовательности (в начало, в конец и между двумя любыми скобками). ваша — добавить не более
n
скобок так, чтобы последовательность превратилась в правильную.
разберём три примера к . в первом примере все три скобки добавлены в конец — мы закрываем уже открытые скобки. во втором примере последовательность и так является правильной. можно вывести её, можно, к примеру, добавить ещё пару скобок — минимальность ответа не требуется. в третьем примере последовательность правильной не является — скобки закрываются не в том порядке. можно исправить, например, вставив открывающую квадратную скобку сперели и закрывающую квадратную — перед закрывающей фигурной.
формат ввода
на вход подаётся непустая строка из не более, чем
1
0
4
символов, состоящая из символов ‘{’, ‘}’, ‘[’, ‘]’, ‘(’ и ‘)’.
формат вывода
выведите итоговую строку, получившуюся после вставки скобок и являющуюся правильной скобочной последовательностью. длина строки не должна превышать удвоенной длины входной строки. если ответов несколько, выведите любой. минимизировать длину строки не требуется.
пример 1
ввод вывод
( [ {
( ) [ ] { }
пример 2
ввод вывод
( [ ] )
( ) [ ] [ ] ( )
пример 3
ввод вывод
{ [ } ]
{ } [ ] { } [ ]
примечания
решением этой должна являться программа на одном из представленных в системе языков программирования, решающая данную . программа должна считывать данные со стандартного ввода (клавиатуры) и выводить на стандартный вывод (монитор). никаких дополнительных строк или символов выводить не разрешается.
в qbasic или паскаль
197
282
Ответы на вопрос:
pascalabc.net
begin
var s : = readlnstring;
var t : = '';
foreach var c in s do
case c of
'(': t += c + ')';
'[': t += c + ']';
'{': t += c + '}';
')': t += '(' + c;
']': t += '[' + c;
'}': t += '{' + c
end;
write(t)
end.
Заметим, что число нулей в записи числа = максимальная степень десятки, на которую делится число = минимальная из степеней двойки и пятерки, входящих в разложение на простые множители этого числа. [ первое равенство очевидно, второе можно доказать от противного] например, 7500 имеет на конце 2 нуля: 7500 = 2^2 * 3 * 5^4 - минимальная из степеней двойки и пятерки как раз 2. в разложении числа n! на простые множители пятерок всегда не больше, чем двоек: если в выражении n! =1*2*3**n есть множитель вида m*5^k, то есть и множитель m*2^k - хотя бы потому, что второе число меньше первого, а факториал - это произведение всех чисел меньше заданного. поэтому при разложении на простые множители степень двойки хотя бы степень двойки. используя наблюдение из первого параграфа, получаем: число нулей в конце десятичной записи числа n! совпадает с числом пятерок в разложении числа n! на простые множители. остается найти число пятерок в разложении. проще всего это понять на примере. 26! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24 * 25 * 26 число чисел, делящихся на 5, среди первых 26 чисел равно пяти (это 5, 10, 15, 20, 25). это число можно найти, округлив вниз результат от деления 26/5. если подумать, можно понять, что в разложении 26! на простые множители 5 встретится не 5 раз - мы забыли учесть число 25, которое даст не одну пятерку, а две. и вообще, в ответ сомножитель что-то*5^n будут давать n пятерок. итого ответ для произвольного n: [n/5] + [n/5^2] + [n/5^3] + алгоритм: c = 0 пока [n/5] > 0: увеличиваем c на [n/5] n = [n/5] вывод c питон-3: n = int( c = 0 while n//5 > 0: c += (n//5) n = n//5 print(c)
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
genenko1822.02.2021 15:35
-
INNADANILOVA20.12.2020 19:22
-
anastasia887906.11.2021 20:53
-
НaстяРайская28.01.2020 01:44
-
настя0603200528.12.2020 23:50
-
альбинка2508.12.2020 01:20
-
Katya18RUS200026.04.2021 02:26
-
Ludo4ka12303.03.2021 12:41
-
veyper126.02.2020 06:30
-
Zalis106.12.2020 02:57
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.