Форум » Выполнение и анализ алгоритмов для исполнителей » Задача №3940 (№5 в ЕГЭ) Е. Джобс » Ответить

Задача №3940 (№5 в ЕГЭ) Е. Джобс

DenGG: [quote](№ 3940) (Е. Джобс) Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом: 1) Строится двоичная запись числа N. 2) В этой записи последний ноль заменяется на первые две цифры полученной записи. Если нуля нет, алгоритм аварийно завершается. 3) Запись записывается справа налево (в обратную сторону). 4) Результат переводится в десятичную систему счисления. Для какого минимального значения N в результате работы алгоритма получится число 123?[/quote] Добрый день! К данной задаче прилагается ответ = 47. Но решая "руками" получается ответ 54. Кроме того по условию задачи п. 2 - если в конце двоичного числа нет нуля - алгоритм прерывается автоматически, т.е. никакое нечетное число N не может выдать результата, т.к. алгоритм прервется. Исходя из этих условий написал программу (может и неказисто выглядит, но на скорую руку, чтобы разобрать во время урока): [pre2] for i in range(1,100): n = i s = '' while n>0: s = str(n%2)+s n=n//2 if s[len(s)-1]=='0': #print(s) s = s[0:len(s)-1]+s[0:2] #print(s) ns = '' for j in range(len(s)): ns = s[j]+ns #print(ns) nn =0 for j in range(len(ns)): nn=nn+int(ns[j])*2**(len(ns)-j) nn//=2 if nn == 123: print(i) [/pre2] Получен - единственный ответ 54. Т.е. говорить при данной формулировке задачи о нескольких возможных вариантах, среди которых надо выбрать наименьший, как-то у меня не получается. Поясните, пожалуйста, это я не догоняю формулировку задачи, или есть какой-то подвох? Спасибо.

Ответов - 8

EugeneJobs: Последний ноль не обязательно должен быть последним разрядом.

Fivel: EugeneJobs пишет: так сказано же "последний ноль ". Алгоритм же один раз выполняется?

Fivel: EugeneJobs пишет: так сказано же "последний ноль ". Алгоритм же один раз выполняется?


DenGG: Спасибо! теперь стало ясно. Любите Вы задачи с подвохами составлять =)

Fivel: А последний ноль в принципе)))

Fivel: А последний ноль в принципе)))

AnnaPershina: [pre2] k=0 for n in range(1,128): a=n x='' while a>0: x=str(a%2)+x a=a//2 p=x.rfind('0') if x.count('0')!=0: s=x[:p]+x[0:2]+x[(p+1):] #print(x) #print(s) #print(' ') x=s[::-1] b=int(x,2) #print(b) if b==123: print(n) [/pre2]

OlgaChe1: Задача легко решается руками: 123 в двоичном представлении 1111011. В обратную сторону = 1101111. Очевидно, что минимальное исходное число должно начинаться с 10... В нашем числе 1101111 этот 0 заменили на 10. Значит, исходным было число 101111. Это 47.



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