На вход алгоритма подается натуральное число N > 9. Алгоритм строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N
2. Далее эта запись обрабатывается по следующим правилам:
а) если последняя цифра числа N равна 8, то три левых разряда двоичной записи числа N заменяются на 100
б) если последняя цифра числа N равна 9, то три правых разряда двоичной записи числа N заменяются на 110
в) если последняя цифра числа N отлична от 8 и 9, то три правых разряда двоичной записи числа N заменяются на 3-битную двоичную запись (триаду) последней цифры числа N.
Полученная таким образом запись является двоичной записью искомого числа R. Например, для исходного числа 2810 = 111002 результатом будет 100002 =162 , а для исходного числа 1910 = 100112 результатом является 101102 = 2210, а для исходного числа 2210 = 101102 результатом является 100102 = 1810.
Укажите минимальное число N, для которого результат работы алгоритма будет иметь наибольшее значение, меньшее 63.
Ответ:
Тренировочный вариант #2 И. Карпачев – задание №5
Решение:
Решение на Python — Зайнулин Салават Рифкатович
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
a = list() for i in range(10, 100): s = bin(i)[2:] if str(i)[-1] == "8": s ="100" + str(s)[3:] elif str(i)[-1] == "9": s = str(s)[:-3] + "110" else: q = str(bin(i % 10)[2:]) if len(q) == 3: s = str(s)[:-3] + q elif len(q) == 2: s = str(s)[:-3] + '0' + q elif len(q) == 1: s = str(s)[:-3] + '00' + q if int(s, 2) < 63: a.append([int(s, 2), i]) a.sort(reverse=True) print(a) |
[[62, 59], [62, 56], [59, 63], [58, 62], [57, 61], [56, 60]…
Ответ: 56
