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

6279

oksakol: Здравствуйте! А почему ответ 12, а не 15? И в самом задании описан алгоритм обработки числа 12 - как пример - на выходе 100 десятичное, а надо не меньше 120. "На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом: 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если N делится на 3, то в конец этой записи дописывается три последние цифры двоичной записи. б) если N не делится на 3, то остаток при делении на 3 числа N умножается на 3, переводится в двоичную запись и дописывается в конец двоичной записи числа N. 3. Полученная таким образом запись является двоичной записью искомого числа R. Например, для исходного числа 1210 = 11002 результатом является число 11001002 = 10010, а для исходного числа 410 = 1002 результатом является число 100112 = 1910. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 120. В ответе запишите это число в десятичной системе счисления." for n in range(1,25): r=bin(n)[2:] if n%3==0: r=r+r[-3:] else: r=r+bin((n%3)*3)[2:] if int(r,2)>=120: print(n,int(r,2))

Ответов - 3

0xFE: 100% ошибка в ответе. правильный ответ 15. т.к. 12 даёт R=100, что не меньше 120. Более того для числа 12 ответ приводится даже в условии

s11kai: 0xFE пишет: 12 даёт R=100, что не меньше 120

s11kai: oksakol пишет: А почему ответ 12, а не 15? И в самом задании описан алгоритм обработки числа 12 - как пример - на выходе 100 десятичное, а надо не меньше 120. Красивое решение, жаль, только не прочитал в начале страницы, что код при публикации нужно "заворачивать" в тег... Посмотри пожалуйста вверху выделено правило и, получится и красиво, и понятно, и опрятно...: [pre2] for n in range(1,100): r = bin(n)[2:] if n%3==0: r = r + r[-3:] else: r=r+bin((n%3)*3)[2:] if int(r,2)>=120: print('n = ',n,'R = ',int(r,2)) break [/pre2]




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