Задание 5. Информатика. ЕГЭ. Шастин. 19.09.2024
Просмотры: 28
Изменено: 23 сентября 2024
(Л. Шастин) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом
- Строится двоичная запись числа N.
- Далее эта запись обрабатывается по следующему правилу:
- если число N делится на 5, то в начало записи дописываются три первые двоичные цифры;
- если число N на 5 не делится, то остаток от деления умножается на 5, переводится в двоичную запись и дописывается в конец числа.
- Полученная таким образом запись является двоичной записью искомого числа R.
- Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 12=11002 результатом является число 110010102=202.
Укажите
максимальное нечётное число N, после обработки которого с помощью этого алгоритма получится число R, меньшее чем 313.
Решение:Pythondef R(N):
b = bin(N)[2:]
if N % 5:
tmp = b + bin(N % 5 * 5)[2:]
else:
tmp = b[:3] + b
return int(tmp, 2)
for N in range(100, 10, -1):
if N % 2 and R(N) < 313:
print(N)
break
Ответ: 35
_______________________________________________________________
Задача (Классическая)На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R по следующему принципу.
1) Строится двоичная запись числа N.
2) К этой записи дописываются справа ещё два разряда по следующему правилу:
а) Складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописываются в конец числа (справа). Например, запись 11100 преобразуется в запись 111001.
б) Над этой записью производятся те же действия - справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите минимальное число R, которое превышает 42 и может являться результатом работы алгоритма. В ответе это число запишите в десятичной системе.
for n in range(1, 1000): s=format(n, 'b') s=s+str(s.count('1')%2) s=s+str(s.count('1')%2) r=int(s, 2) if r>42: print(r)Программа будет выводить различные числа, но нас интересует самое маленькое. В ответе получается
46. Чтобы остановить поток чисел, можно нажать сочетание
Ctrl + C.
В программе перебираем натуральные числа от 1 до 1000 с помощью цикла
for. Каждое число подставляем в описанный алгоритм, в надежде получить в результате число
r, удовлетворяющие условию задачи.
С помощью функции
format переводим число
n в двоичный вид. Получаем результат в виде
строки s.
Чтобы найти сумму цифр получившейся двоичной записи, достаточно подсчитать количество единиц в строке
s. Ведь только единицы в двоичной записи дают в сумму результат. Это можно сделать, применив функцию
.count() к строке
s.
Добавляем справа к строке
s остаток от деления суммы цифр на 2. Остаток нужно превратить в строковый тип данных, чтобы "присоединить" его к строке
s справа.
Повторяем пункт Б, скопировав строку с пунктом А.
Чтобы обратно превратить строку двоичной записи в десятичное число, используем функцию
int(), указав параметр
2.
В конце программы пропишем условие. Если
r больше 42, то будем печатать эти значения. Остаётся выбрать минимальное число
r.
Ответ: 46