Задание №5 — Анализ простейших алгоритмов
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится четверичная запись числа N.
2) Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 4, то к этой записи дописываются две последние четверичные цифры;
б) если число N на 4 не делится, то остаток от деления умножается на 2, переводится в четверичную запись и дописывается в конец числа.
Полученная таким образом запись является четверичной записью искомого числа R.
3) Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 11 = 234 результатом является число 23124 = 182, а для исходного числа 12 = 304 это число 30304 = 204.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма, получается число R, меньшее 369.
Правильный ответ
89
Пояснение
Решение:
Пусть — последняя цифра четверичной записи . Разберём, что приписывается справа в каждом случае.
- : приписываются две последние четверичные цифры, то есть запись удлиняется на два разряда, а приписанное значение равно . Значит .
- : — один разряд, поэтому .
- : — два разряда, поэтому .
- : — два разряда, поэтому .
Сверим с примерами из условия: , , ; , , . Совпадает.
Ключевое наблюдение: только при число увеличивается в 4 раза, во всех остальных случаях — в 16 раз.
Нужно наибольшее , при котором . Рассмотрим все четыре случая.
- : . Наибольшее число вида , не превосходящее 91, — это , для него .
- : . Подходит , .
- : . Наибольшее число вида — это , .
- : . Подходит , .
Наибольшее из чисел 89, 22, 19, 20 — это 89.
def alg(n):
q = ''
m = n
while m:
q = str(m % 4) + q
m //= 4
if n % 4 == 0:
q += q[-2:]
else:
t = (n % 4) * 2
q += str(t) if t < 4 else str(t // 4) + str(t % 4)
return int(q, 4)
print(max(n for n in range(1, 1000) if alg(n) < 369))
Ответ: 89