PascalABC.NET 3.7:
###RS.AdjacentGroup.SelectMany(x → x.Len >= 3 ? x.Len + x[0] : x.Str).PrПояснение:
RS - ReadString: Возвращает значение типа string, введенное с клавиатуры.
AdjacentGroup: Группирует одинаковые подряд идущие элементы, получая последовательность массивов.
SelectMany: Проецирует каждый элемент последовательности в новую последовательность и объединяет результирующие последовательности в одну последовательность.
.Len - .Length: Длина массива.
.Str - .JoinToString: Преобразует последовательность символов в строку, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
.Pr - .Print: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
Пример работы:
8 = 1000₂
Раздели на 2, раздели на 2, раздели на 2, вычти 1.
9 = 1001₂
Вычти 1, раздели на 2, раздели на 2, раздели на 2, вычти 1.
15 = 1111₂
Вычти 1, раздели на 2, вычти 1, раздели на 2, вычти 1, раздели на 2, вычти 1.
16 = 10000₂
Раздели на 2, раздели на 2, раздели на 2, раздели на 2, вычти 1.
Второе задание не понял. Говорится, что на вход подаются три двузначных числа, потом считаются суммы старших и младших разрядов заданных трехзначных чисел. В первом пункте вычисляются два числа, а во втором говорится о полученных трех числах.
A,B,C: array[1..100] of integer;
i,n,j,k:integer;
begin
randomize;
j:=0;
k:=0;
Readln(n);
Writeln('Исходный массив:');
for i:=1 to n do
begin
A[i]:=random(10);
writeln('A[',i,']=',A[i]);
end;
for i:=1 to n do
if A[i]>5.5
then
begin
j:=j+1;
B[j]:=A[i];
end;
for i:=1 to n do
if A[i]<=5.5
then
begin
K:=k+1;
C[k]:=A[i];
end;
for i:=1 to j do
writeln('B[',i,']=', B[i]);
for i:=1 to k do
writeln('C[',i,']=', C[i]);
end.