• Текст (например, арифметическое выражение) содержит многократно вложенные круглые скобки. Исправить его, оставив скобки первого уровня круглыми, второго – заменить на квадратные, третьего и последующих – на фигурные. Убедиться в корректности использования скобок.

    Пример. ln(sin((a+b)c-d)) заменить выражением ln{sin[(a+b)c-d]}.

Ответы 2

  • не буду утверждать что решение оптимальное но рабботает
  • //PascalABC.NET 3.1 сборка 1239var    brackets: array [0..2, 0..1] of char := (('{', '}'), ('[', ']'), ('(', ')'));begin    var s := ReadlnString();    var counter := 0;    var max_depth := 0;        for var i := 1 to s.Length do     begin        if s[i] = '(' then counter += 1        else if s[i] = ')' then counter -= 1        else continue;        if counter < 0 then begin            writeln('brackets error');            Halt;        end;        if counter > max_depth then max_depth := counter;    end;        counter := 0;    for var i := 1 to s.Length do     begin        if s[i] = '(' then counter += 1        else if s[i] = ')' then counter -= 1        else continue;                if (counter = max_depth - 1) and (s[i] = '(') then s[i] := brackets[1, 0]        else if (counter = max_depth - 2) and (s[i] = ')') then s[i] := brackets[1, 1]        else if (counter = max_depth - 2) and (s[i] = '(') then s[i] := brackets[0, 0]        else if (counter = max_depth - 3) and (s[i] = ')') then s[i] := brackets[0, 1];    end;        writeln(s);end.
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years