Дано 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
Вот для сопоставленья решение на Паскале. Я тоже использовал стек, чтоб проще было сопоставлять)))
// 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
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
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Игорь 14 лет назад был на 8 лет моложе, чем его
Математика.
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
Облако тегов