(Оффтоп)
Несмотря ни на что, эта задачка-таки математическая!
Программист Карл только что спаял процессор. В процессоре всего 26 регистров по 8 бит, обозначающихся буквами от A до Z, а ещё он поддерживает следующие инструкции:
(в инструкциях используются такие обозначения: R — регистр, C — константное число, X — или регистр, или константное число)
1.
and R X — посчитать двоичное И чисел R (значение в регистре) и X, а затем записать его в R
2.
or R X — посчитать двоично ИЛИ чисел R и X и записать его в R
3.
not R — посчитать двоичное НЕ от R и записать его в R
4.
shl R C — произвести двоичный сдвиг влево числа в R
5.
shr R C — произвести двоичный сдвиг вправо числа в R
6.
mov R X — записать в R значение X
7.
get R — считать число и записать его в R
8.
put R — написать число, хранящееся в R
Пояснение: произвести двоичный сдвиг влево 8-битного числа означает отрезать самую левую двоичную цифру, а справа приписать 0 (сдвиг вправо аналогичен).
not инвертирует все 8 бит, а не только какой-то один
Программист Карл решил написать программу, которая считывает число 0 или 1, инвертирует последний бит и выводит (0->1, 1->0), у него получился следующий код:
Код:
get A
not A
and A 1
put A
а) Теперь программист Карл задумался, можно ли сделать аналогичное для 8-ми чисел (нулей и единиц)? К сожалению, процессор получился довольно медленным, поэтому он не может выполнять больше одной инструкции
not за программу. Учитывая это, ответье на его вопрос
б) Ура! Программист Карл сделал свой процессор в два раза мощнее и теперь он может выполнять до двух
not за программу. Карла интересует, можно ли для 19 чисел (нулей и единиц) вывести их инверсии?
(Оффтоп)
Задачка повзаимствована из только что окончившегося соревнования IPSC :) venco, Вы не участвовали? И с проходом Вас в Р3!