Задание 5. (ДЕМО-2023)
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 10;
б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11.
Полученная таким образом запись является двоичной записью искомого числа R.
Например, для исходного числа 6 (10) = 110 (2) результатом является число 1000 (2) = 8 (10) , а для исходного числа 4 (10) = 100 (2) результатом является число 1101 (2) = 13 (10) .
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 40. В ответе запишите это число в десятичной системе счисления.
Решение
Запишем программу на Pascal
uses school;
begin
for var n:=4 to 40 do
begin
var b:=bin(n);
if b.CountOf('1') mod 2 =0 then b:='10'+b[3:]+’0’ else b:='11'+b[3:]+'1';
if dec(b,2)>40 then (println(n));
end;
end.
Ответ: 16
Пример 1.
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью результирующего числа R.
Укажите такое наименьшее число N, для которого результат работы алгоритма больше числа 77. В ответе это число запишите в десятичной системе счисления.
uses school;
var s:integer;
begin
for var n:=2 to 100 do
begin
var b:=bin(n);
s:= b.CountOf('1') mod 2;
b:=b+inttostr(s);
s:= b.CountOf('1') mod 2;
b:=b+inttostr(s);
if dec(b,2)>77 then println(n);
end;
end.
Ответ: 19
Пример 2.
Автомат обрабатывает натуральное число N (0 ≤ N ≤ 255) по следующему алгоритму:
1. Строится восьмибитная двоичная запись числа N.
2. Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0).
3. Полученное число переводится в десятичную запись.4. Из нового числа вычитается исходное, полученная разность выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом.
1. Восьмибитная двоичная запись числа N: 00001101.
2. Все цифры заменяются на противоположные, новая запись 11110010.
3. Десятичное значение полученного числа 242.
4. На экран выводится число 242 − 13 = 229. Какое число нужно ввести в автомат, чтобы в результате получилось 133?
uses school;
var x:integer;
begin
for var n:=0 to 255 do
begin
var b:=bin(n);
if length(b)<8 then b:='0'*(8-length(b))+b;
b:=b.replace('1', '*');
b:= b.replace('0', '1');
b := b.replace('*', '0');
if dec(b,2)-n=133 then println(n);
end;
end.
Ответ: 61
Авторизуйтесь, чтобы оставить свой комментарий: