Задание 5. ЕГЭ по информатике. На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число кратно 3, то к двоичной записи числа слева дописывается 1, а затем два правых разряда заменяются на 11;
б) если число не кратно 3, то к двоичной записи числа слева дописывается 10 и справа дописывается 0.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Укажите минимальное значение R, которое превышает 999 и может быть результатом работы данного алгоритма, при условии, что N не может быть нечётным. В ответе запишите это число в десятичной системе счисления.
Источник: kompege.ru
Как будем решать задачу
- Запустим цикл по подбираемому числу n в диапазоне от 2 до 2000 с шагом 2 (нам нужны натуральные четные числа, граница 2000 подбираемая, но это прям "с запасом")
- В цикле реализуем описанный алгоритм:
- переведем число в двоичную строку функцией bin(), возьмем срез со второго символа строки до конца (первые два символа '0b' в полученной двоичной строке нам не нужны, это не цифры двоичного числа) s = bin(n)[2:]
- выполним проверку числа n на кратность 3, если число кратно 3, то слева к двоичной строке припишем '1', в середину строки положим строку без последних двух символов, а справа допишем '11' (таким образом заменим два последних символа на символы '11') s = '1' + s[:-2] + '11'
- переведем полученную новую двоичную строку в десятичную систему счисления функцией int(s, 2)
- найдем минимальный результат. который больше 999 (выполним проверку полученного результата, если число больше 999 и меньше некого минимума, то минимум перезапишем на это число)
- За циклом выведем минимальный результат
Программа решения задачи на языке Python
m = 10000 #начальное значение искомого минимума
for n in range(2,2000,2):
s = bin(n)[2:]
if n % 3 == 0:
s = '1' + s[:-2] + '11'
else:
s = '10' + s +'0'
r = int(s, 2)
if r>999 and r<m:
m = r
print(m)
Ответ: 1007
Комментариев нет:
Отправить комментарий