Посмотрел решение на С++. Ну что же, я недаром зову его "полуассемблер" - нечего ему в общеобразовательных школах делать... Писать долго, много и непонятно для непосвященных. А сколько при этом можно ошибок сделать - просто жуть. Вот для сравнения решение на Паскале. Я тоже использовал стек, чтобы проще было сравнивать)))
// 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
1. 2,5 сек
2. 16 000 байт
Объяснение:
1.
I = t * f * i * k, где
I - информационный объём аудио файла (размер файла, содержащего запись звука)
t - длительность звучания (секунды)
f - частота дискретизации (Гц, количество значений амплитуды звука, фиксируемых за одну секунду)
i - глубина звука (разрешение) (число бит, используемых для хранения каждого измеренного значения)
k - количество каналов записи (1 - моно, 2 - стерео и т.д.)
Дано:
I = 468,75 Кбайт = 3 840 000 бит
i = 16 бит
f = 48 кГц = 48 000 Гц
k = 2
Найти:
t
I = t * f * i * k
t = I / (f * i * k)
t = 3 840 000 / (48 000 * 16 * 2) = 3 840 000 / 1 536 000 = 2,5 сек
2.
I = K * i, где
I - информационный объём изображения (размер файла, содержащего изображение)
K - количество точек (пикселей)
i - глубина цвета (число бит, используемых для записи цвета одного пикселя)
N = 2^i, где
N - количество цветов в палитре
i - глубина цвета (число бит, используемых для записи цвета одного пикселя)
Дано:
К = 640 * 200 = 128 000 пикселей
N = 2 цвета
Найти:
I
2 = 2^i
2 = 2¹
i = 1 бит
I = 128 000 * 1 = 128 000 бит = 16 000 байт = 15,625 Кбайт
1 байт = 8 бит
1 Кбайт = 1024 байт
1 кГц = 1 000 Гц
Вот для сравнения решение на Паскале. Я тоже использовал стек, чтобы проще было сравнивать)))
// 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