В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
bbbbbbbbbb2
bbbbbbbbbb2
05.09.2022 02:25 •  Информатика

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

Показать ответ
Ответ:
Sheva031
Sheva031
15.10.2020 07:37
                                     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).

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


Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота