Имеем строку из единиц длиной 99 символов. Пока в строке имеется подстрока 111, выполняется цикл. Подстрока 111 заменяется на 2 и это уменьшает длину строки на 2 символа. Эта операция повторяется, пока не появится подстрока 222, что достигается за три прохода по циклу. При этом длина строки в целом сократится на 6. Подстрока 222 заменяется на 1, после чего получается строка исходного вида (из одних единиц), но с длиной на 8 меньше исходной. Этот процесс будет повторятся и длина строки последовательно будет такой: 99, 91, 83, ... 11. Можно предположить, что строка окончательно примет длину 99 mod 8 = 3, но все немного сложнее. Дело в том, что строка длиной 11, т.е. 1111111111 будет последовательно преобразована к 211111111 2211111 22211 и после этого цикл закончится, поскольку подстроки 111 больше найдено не будет.
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк (столбцов) в массиве:'); Writeln('*** Исходный массив ***'); var a:=MatrRandom(n,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); Writeln('Cуммы и число положительных элементов построчно:'); foreach var r in a.Rows do begin var s:=r.Where(t->t>0); Println(s.Sum,s.Count) end end.
Пока в строке имеется подстрока 111, выполняется цикл.
Подстрока 111 заменяется на 2 и это уменьшает длину строки на 2 символа.
Эта операция повторяется, пока не появится подстрока 222, что достигается за три прохода по циклу. При этом длина строки в целом сократится на 6.
Подстрока 222 заменяется на 1, после чего получается строка исходного вида (из одних единиц), но с длиной на 8 меньше исходной.
Этот процесс будет повторятся и длина строки последовательно будет такой:
99, 91, 83, ... 11. Можно предположить, что строка окончательно примет длину 99 mod 8 = 3, но все немного сложнее.
Дело в том, что строка длиной 11, т.е. 1111111111 будет последовательно преобразована к
211111111
2211111
22211
и после этого цикл закончится, поскольку подстроки 111 больше найдено не будет.
ответ: 22211
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк (столбцов) в массиве:');
Writeln('*** Исходный массив ***');
var a:=MatrRandom(n,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
Writeln('Cуммы и число положительных элементов построчно:');
foreach var r in a.Rows do begin
var s:=r.Where(t->t>0);
Println(s.Sum,s.Count)
end
end.
Пример
Количество строк (столбцов) в массиве: 6
*** Исходный массив ***
-98 -66 14 -63 78 -47
-7 59 -88 -7 6 -13
-89 26 29 78 -79 54
-99 55 -15 45 -14 -58
-59 -68 -93 55 63 -33
-72 -94 42 -89 -86 70
Cуммы и число положительных элементов построчно:
92 2
65 2
187 4
100 2
118 2
112 2