Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы:
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы:
procedure FindElem(a: array [,] of integer; var min, max: integer);
begin
min := integer.MaxValue;
max := integer.MinValue;
for var i := 0 to a.GetLength(0) - 1 do
for var j := 0 to a.GetLength(1) - 1 do
if a[i, j] mod 2 = 0 then
begin
if a[i, j] > max then
max := a[i, j];
if a[i, j] < min then
min := a[i, j];
end;
end;
///Создает массив 10 на 10 целых чисел из рандома от 0 до 10
function MakeArray: array [,] of integer;
begin
SetLength(result, 10, 10);
for var i := 0 to result.GetLength(0) - 1 do
for var j := 0 to result.GetLength(1) - 1 do
result[i,j] := Random(0, 10);
end;
///Распечатывает массив
procedure PrintArray(a: array [,] of integer);
begin
for var i := 0 to a.GetLength(0) - 1 do
begin
for var j := 0 to a.GetLength(1) - 1 do
Print(a[i,j]);
writeln;
end;
end;
begin
var c := MakeArray;
var min, max: integer;
PrintArray(c);
FindElem(c, min, max);
Writeln('min = ', min);
Writeln('max = ', max);
end.