Форум » Выполнение и анализ алгоритмов для исполнителей » демоверсия ЕГЭ 2023 задание 5 » Ответить

демоверсия ЕГЭ 2023 задание 5

s11kai: Здравствуйте, Константин Юрьевич! Вчера меня попросили помочь с решением пятого задания из демоверсии 2023, сослался на ваш сайт, поскольку у вас можно найти все, но, как оказалось, вы еще не проводили разбора данного задания. Сходу смог придумать только частные решения, если сочтете возможным что-либо опубликовать, буду вам благодарен. Рассуждал примерно так: Известно, что число 15 в двоичном коде = 1111, после обработки оно даст двоичный код 10110 = десятичному 22, что меньше 40. Стало быть, начинаем обрабатывать числа в цикле с 16. [pre2] # для 15 < n < 24, работа с двоичным кодом for n in range(16,23+1): k = s = bin(n)[2:] if s.count("1")%2 == 0: s=s+'0' else: s=s+'1' s = s.replace('10', '11',1) print(n,k,s,int(s,2)) [/pre2] [pre2] # для 15 < n < 24, работа с десятичным числом for n in range(16,23+1): s = bin(n)[2:] if s.count("1")%2 == 0: k = n*2 else: k = n*2+17 print(n,s,bin(k)[2:],k) [/pre2] результат работы программы: 16 10000 110001 49 17 10001 100010 34 18 10010 100100 36 19 10011 110111 55 20 10100 101000 40 21 10101 111011 59 22 10110 111101 61 23 10111 101110 46 если невнимательно прочитать вопрос, то анализируя работу программы можно выбрать неверные ответы А вот сегодня догнал, как можно перейти от частного случая к полновесному решению обрабатывающему любые числа, вдруг кому-то пригодится [pre2] # общий случай для любого числа n > 1 for n in range(1,240): kk = s = bin(n)[2:] if s.count("1")%2 == 0: s = '10' + s[2:] + '0' else: s = '11' + s[2:] + '1' if int(s,2)>40: # print(n,kk,s,int(s,2)) данная строка для визуализации работы программы break print('ответ:',n) [/pre2] С уважением, Александр

Ответов - 2

Поляков: Александр, здравствуйте! Спасибо, добавлю в готовые решения последний вариант.

s11kai: Поляков пишет: Спасибо, добавлю в готовые решения последний вариант Спасибо Вам, Константин Юрьевич!



полная версия страницы