Дано N строк. Вывести для каждой строки Good, если она — правильное скобочное выражение и Bad, если нет.

Посмотрел решение на С++. Ну что же, я недаром зову его «полуассемблер» — нечего ему в общеобразовательных школах делать… Писать долго, много и непонятно для непосвященных. А сколько при этом можно ошибок сделать — просто жуть.
Вот для сравнения решение на Паскале. Я тоже использовал стек, чтобы проще было сравнивать)))

// PascalABC.NET 3.2, сборка 1370 от 24.12.2016
// Внимание! Если программа не работает, обновите версию!

function IsGood(s:string):Boolean;
begin
  var St:=new Stack<char>;
  foreach var c in s do
    case c of
    ‘(‘:St.Push(c);
    ‘)’:if St.Count>0 then St.Pop
        else begin Result:=false; Exit end;
    end;
  Result:=St.Count=0
end;

begin
  var n:=ReadlnInteger(‘N=’);
  var s:=ReadArrString(n);
  s.Select(x->IsGood(x)).Select(x->x?’Good’:’Bad’).Println(NewLine)
end.

Контрольный пример (скобки «разбавлены» числами, чтобы было ясно, что программа не только скобки умеет читать, но и проверять их расстановку в произвольной строке)

N= 4
12(3)456(7)8
123((67)8)
12)34(5
(1(234)567
Good
Good
Bad
Bad

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *