Автор | Сообщение |
|
Отправлено: 05.12.23 07:01. Заголовок: Задача 6999 неправильный ответ
В задаче сказано "На вход алгоритма подается натуральное число 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
[только новые]
|
|
|
Отправлено: 05.12.23 19:48. Заголовок: Мне кажется, вы неве..
Мне кажется, вы неверно поняли условие. Последний 0 - это не ноль на последней позиции, а последний встречающийся 0 в строке, т.е первый 0 от конца 100111000 01) вот код, который выдает верный ответ 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 И для того чтобы не происходил сдвиг строк кода, не используйте -----, а читайте сверху на желтом фоне цитата: | Программы "заворачивайте" в тэг ... |
|
|
|
|