Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная...

0 голосов
665 просмотров

Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа N. 2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления полученной суммы на 2. 3. Предыдущий пункт повторяется для записи с добавленной цифрой. 4. Результат переводится в десятичную систему и выводится на экран. Сколько различных чисел, принадлежащих отрезку [90; 160], могут появиться на экране в результате работы автомата?​


Информатика (200 баллов) | 665 просмотров
Дан 1 ответ
0 голосов

                                     PascalABC.NET                                      

Ответ:

  • function ToBinary (x:integer):string;
  • begin
  • if (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;
  • end;
  • function FromBinary (x:string):integer;
  • begin
  • if (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));
  • end;
  • function func (x:integer):integer;
  • begin
  • var 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 Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).

ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).

Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).

Пример работы:


image
image
image
(3.7k баллов)