мой учитель хочет, чтобы я отсортировал случайное количество скобок.
Я пытался решить эту проблему сам ... Однако, я считаю свое решение плохим и надеюсь, что у кого-то есть идея получше
Строка содержит только эти символы: () [] {} ...
Итак, прежде всего я проверил длину строки, а затем сделал так, чтобы оператор case подсчитывал каждый символ, чтобы сохранить число в переменных.
После этого я использовал значение в переменных, чтобы получить желаемый результат.
program counter;
uses SysUtils, crt;
var
character: String;
k1_open,k2_open,k3_open,k1_closed,k2_closed,k3_closed : Integer;
i : Integer;
begin
writeln('sort brackets (1. Version)');
write('Input: ');readln(character);
for i := 1 to length(character) do
begin
case character[i] of
'(' : k1_open := k1_open + 1;
'[' : k2_open := k2_open + 1;
'{' : k3_open := k3_open + 1;
')' : k1_closed := k1_closed + 1;
']' : k2_closed := k2_closed + 1;
'}' : k3_closed := k3_closed + 1;
end;
end;
if (k1_open = 1) and (k1_closed = 1) then begin
write('()');
end else if (k1_open = 2) and (k1_closed = 2) then begin
write('()()');
end else if (k1_open = 3) and (k1_closed = 3) then begin
write('()()()');
end;
if (k2_open = 1) and (k2_closed = 1) then begin
write('[]');
end else if (k2_open = 2) and (k2_closed = 2) then begin
write('[][]');
end else if (k2_open = 3) and (k2_closed = 3) then begin
write('[][][]');
end;
if (k3_open = 1) and (k3_closed = 1) then begin
write('{}');
end else if (k3_open = 2) and (k3_closed = 2) then begin
write('{}{}');
end else if (k3_open = 3) and (k3_closed = 3) then begin
write('{}{}{}');
end;
end.
Примеры:
Input: [{])]}(
Output: {}[]()
Input: [(}{[])}(]{)
Output:{}{}[][]()()
Input: [][}}](
Output: Error - brackets do not match.
Как я уже сказал - у меня есть желаемый результат ... но я думаю, что он плохо реализован.
Но я не мог найти лучшего решения.
Надеюсь, вы мне поможете - спасибо!