Дано N строк. Вывести для каждой строчки Good, если она -

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

Задать свой вопрос
Гена Позаненко
Формат ввода:N - количество строкs1s2...sN - строкиПример ввода:4()()(()))((()Формат вывода:Good либо Bad для каждой введённой строчки Пример вывода:GoodGoodBadBad
2 ответа
Поглядел решение на С++. Ну что же, я недаром зову его "полуассемблер" - нечего ему в общеобразовательных школах делать... Писать длинно, много и непонятно для непосвященных. А сколько при этом можно ошибок сделать - просто жуть.
Вот для сопоставленья решение на Паскале. Я тоже использовал стек, чтоб проще было сопоставлять)))

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

function IsGood(s:string):Boolean;
begin
  var St:=new Stacklt;chargt;;
  foreach var c in s do
    case c of
    '(':St.Push(c);
    ')':if St.Countgt;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-gt;IsGood(x)).Select(x-gt;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
Для проверки, закрыты ли все скобки, можно было бы просто их посчитать, но мы будем инспектировать правильность вложенности. Для этого нам пригодится std::stack (да, и решаем на С++).

include lt;iostreamgt;
include lt;stackgt;
include lt;stringgt;
using namespace std;
typedef unsigned short int USI;

bool hasCorrectBracing(string);

int main()

setlocale(0, ""); // кириллица
USI N;
cout lt;lt; "N = ";
cin gt;gt; N;
string row;

for(size_t i = 1; i lt;= N; i++)

cout lt;lt; "Строчка " lt;lt; i lt;lt; ": ";
cin gt;gt; row;
if ( hasCorrectBracing(row) )

cout lt;lt; "Good\n";

else

cout lt; "Bad\n";



return 0;


bool hasCorrectBracing(string r)

stack lt;chargt; st;

for(string::size_type c = 0;
c lt; r.size();
c++)


if (r[c] == '(')

st.push('(');
continue;

else

if (r[c] == '[')

st.push('[');
continue;

else

if (r[c] == '')

st.push('');
continue;


// end 1st if

if
(
(
(st.top() == '(')
amp;amp;
(r[c] == ')')
)

(
(st.top() == '[')
amp;amp;
(r[c] == ']')
)

(
(st.top() == '')
amp;amp;
(r[c] == '')
)
)

st.pop();
//end 2nd if

// end for

if ( st.empty() )

return true;

else

return false;


// end fun
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт