Процедура обработки строки состоит из двух последовательных операций: заменить в строке все символы 'a' на подстроку 'ab' заменить в строке все подстроки 'bb' на символ 'с' процедура может выполняться многократно. в этом случае, при очередном вызове, на вход процедуре подается строка, получившаяся в результате предыдущего выполнения процедуры. например, если исходно была строка 'aab' и процедура выполнилась 3 раза, то в результате получится строка 'abcacc'. пусть исходно была строка 'abab', и процедуру выполнили 333 раза. определите количество каждого символа в получившейся строке. в ответе укажите через запятую три числа: сначала количество символов 'a', затем количество символов 'b' и затем количество символов 'c'.
Решение №1 (элементарное)
При оформлении этого решения количество ламп в сигнале фиксировано и равно
количеству всех цветных ламп.
Решение №2 (стандартное)
При оформлении решения последовательно учитывается то что сигнал может
состоять из 1 лампы, из двух ламп, из трех и т.д. ламп. В этом подходе решение,
описанное ранее, является частным случаем.
Решение №3 (комплексное)При оформлении этого решения учитывается то что лампа может гореть, а может
не гореть и тогда важен не только порядок и количество ламп в сигнале, но и
положение лампы в общем ряду.
Замечание: Основная нагрузка в решении сводится к наиболее полному описанию
возможных вариантов сигналов и вычислению их количества.
// Внимание! Если программа не работает, обновите версию!
begin
var s:=ReadlnString('>');
var p:=s.Select((x,i)->(x,i+1)).Where(x->x[1].IsOdd and (x[0]=' '));
Writeln('Число пробелов на начетных местах равно ',p.Count);
foreach var t in p do s[t[1]]:='*';
Writeln(s)
end.
Пример
> А роза упала на лапу Азора
Число пробелов на начетных местах равно 3
А роза*упала*на лапу*Азора
// PascalABC.NET 3.2, сборка 1362 от 14.12.2016
// Внимание! Если программа не работает, обновите версию!
begin
var s:=ReadlnString('>');
var n:=s.Length;
if n mod 4<>0 then Writeln('Кол-во символов не кратно 4')
else begin
var i:=1;
repeat
Swap(s[i],s[i+3]);
Swap(s[i+1],s[i+2]);
i+=4
until i>n;
Writeln(s)
end
end.
Пример
> карандаш
аракшадн