Автор | Сообщение |
|
Отправлено: 23.09.21 12:02. Заголовок: Задача №3940 (№5 в ЕГЭ) Е. Джобс
цитата: | (№ 3940) (Е. Джобс) Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом: 1) Строится двоичная запись числа N. 2) В этой записи последний ноль заменяется на первые две цифры полученной записи. Если нуля нет, алгоритм аварийно завершается. 3) Запись записывается справа налево (в обратную сторону). 4) Результат переводится в десятичную систему счисления. Для какого минимального значения N в результате работы алгоритма получится число 123? |
| Добрый день! К данной задаче прилагается ответ = 47. Но решая "руками" получается ответ 54. Кроме того по условию задачи п. 2 - если в конце двоичного числа нет нуля - алгоритм прерывается автоматически, т.е. никакое нечетное число N не может выдать результата, т.к. алгоритм прервется. Исходя из этих условий написал программу (может и неказисто выглядит, но на скорую руку, чтобы разобрать во время урока): 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) Получен - единственный ответ 54. Т.е. говорить при данной формулировке задачи о нескольких возможных вариантах, среди которых надо выбрать наименьший, как-то у меня не получается. Поясните, пожалуйста, это я не догоняю формулировку задачи, или есть какой-то подвох? Спасибо.
|
|
|
Ответов - 8
[только новые]
|
|
|
Отправлено: 28.09.21 18:00. Заголовок: Последний ноль не об..
Последний ноль не обязательно должен быть последним разрядом.
|
|
|
|
Отправлено: 11.10.21 11:30. Заголовок: EugeneJobs пишет: ..
EugeneJobs пишет: [quote]` так сказано же "последний ноль ". Алгоритм же один раз выполняется?
|
|
|
|
Отправлено: 11.10.21 11:30. Заголовок: EugeneJobs пишет: ..
EugeneJobs пишет: [quote]` так сказано же "последний ноль ". Алгоритм же один раз выполняется?
|
|
|
|
Отправлено: 29.09.21 13:57. Заголовок: Спасибо! теперь стал..
Спасибо! теперь стало ясно. Любите Вы задачи с подвохами составлять =)
|
|
|
|
Отправлено: 11.10.21 11:34. Заголовок: А последний ноль в п..
А последний ноль в принципе)))
|
|
|
|
Отправлено: 11.10.21 11:34. Заголовок: А последний ноль в п..
А последний ноль в принципе)))
|
|
|
|
Отправлено: 15.10.21 02:48. Заголовок: k=0 for n in range(..
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)
|
|
|
|
Отправлено: 15.10.21 08:39. Заголовок: Задача легко решаетс..
Задача легко решается руками: 123 в двоичном представлении 1111011. В обратную сторону = 1101111. Очевидно, что минимальное исходное число должно начинаться с 10... В нашем числе 1101111 этот 0 заменили на 10. Значит, исходным было число 101111. Это 47.
|
|
|
|