PascalABC.NET function ToBinary (x:integer):string; beginif (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;end; function FromBinary (x:string):integer; beginif (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));end; function func (x:integer):integer; beginvar s := ToBinary(x); loop 2 do s += s.AsEnumerable.Sum(c->c.ToDigit) mod 2; func:=FromBinary(s);end; begin Println('f(N):',func(ReadInteger('N:'))); Println('Количество:',(1..160).Count(x->func(x) in 90..160)); end.
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
function storona(x1,y1,x2,y2: real): real;
var s: real;
begin
s:=sqrt(sqr(x1-x2)+sqr(y1-y2));
storona:=s;
end;
var
x1,y1,x2,y2,x3,y3: real;
l1,l2,l3: real;
begin
//Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
//Если после переключения русские буквы показываются неверно,
//следует открыть системное меню консольного окна - щелчком мыши в левом
//верхнем углу окна консоли и выбрать:
//Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
write('Введите координаты точки А: ');
readln(x1,y1);
write('Введите координаты точки B: ');
readln(x2,y2);
write('Введите координаты точки C: ');
readln(x3,y3);
l1:=storona(x1,y1,x2,y2);
l2:=storona(x2,y2,x3,y3);
l3:=storona(x1,y1,x3,y3);
if (l1>l2)and(l1>l3) then
begin
writeln('Периметр прямоугольника = ',(l2+l3)*2:6:2);
writeln('Площадь прямоугольника = ',l2*l3:6:2)
end;
if (l2>l1)and(l2>l3) then
begin
writeln('Периметр прямоугольника = ',(l1+l3)*2:6:2);
writeln('Площадь прямоугольника = ',l1*l3:6:2)
end;
if (l3>l1)and(l3>l2) then
begin
writeln('Периметр прямоугольника = ',(l1+l2)*2:6:2);
writeln('Площадь прямоугольника = ',l1*l2:6:2)
end;
readln;
end.
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы: