Форум » Выполнение и анализ алгоритмов для исполнителей » Задача 6999 неправильный ответ » Ответить

Задача 6999 неправильный ответ

nebaryshev: В задаче сказано "На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. В этой записи последний ноль заменяется на первые две цифры полученной записи. Если нуля нет, алгоритм аварийно завершается." И спрашивается "Для какого минимального значения N в результате работы алгоритма получится число 123?" Ответ у задачи: 47, который, как мне кажется, является неверным 1. Число 47 – нечетное, значитв двоичной системе оканчивается на 1, а не на 0, следовательно для такого исходного числа программа должна экстренно завершиться и не выдать ответ 2. Решение на Python приложу ниже, можете ознакомиться. У меня ответ получился 54 def algo(n): ____bin_num = format(n, 'b') ____if bin_num[-1] != '0': ________raise ValueError ____bin_num = bin_num[:-1] + bin_num[:2] ____bin_num = bin_num[::-1] ____return int(bin_num, 2) for N in range(1, 100000): ____try: ________R = algo(N) ____except ValueError: ________R = None ____if R == 123: ________print(N)

Ответов - 1

Ж: Мне кажется, вы неверно поняли условие. Последний 0 - это не ноль на последней позиции, а последний встречающийся 0 в строке, т.е первый 0 от конца 10011100001) вот код, который выдает верный ответ [pre2] for n in range(100): a=bin(n)[2::][::-1] if '0' in a and len(a)>=2: a=a.replace('0',a[-2::],1) if int(a,2)==123: print(n) break [/pre2] И для того чтобы не происходил сдвиг строк кода, не используйте -----, а читайте сверху на желтом фоне Программы "заворачивайте" в тэг ...



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