Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задание на питоне!

Денис Фадеев Ученик (105), закрыт 1 месяц назад
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если сумма цифр в двоичной записи числа чётная, то к этой записи слева дописывается 10; б) если сумма цифр в двоичной записи числа нечётная, то к этой записи слева дописывается 11; в) инвертируем крайний правый разряд. Полученная таким образом запись является двоичной записью искомого числа R. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 120. В ответе запишите это число в десятичной системе счисления. Помогите решить на питоне, я здесь решаю с помощью строк. Не знаю как инвертировать крайний правый разряд
Дополнен 1 месяц назад
Лучший ответ
ВАдим Тагиров Гуру (2678) 1 месяц назад
 list = []
for n in range(0, 1000):
N = bin(n)[2:]
summa = 0
for digit in N:
summa += int(digit)

if summa % 2 == 0:
N = '10' + N
if summa % 2 != 0:
N = '11' + N

if N[-1] == '0':
N = N[:-1] + '1'
elif N[-1] == '1':
N = N[:-1] + '0'
R = int(N, 2)
if R > 120:
list.append(n)
print(min(list))

хз так наверное. Сорян, может я намудрил и лишнего понаписал
Денис ФадеевУченик (105) 1 месяц назад
Спасибо большое! Мне самое главное было понять как бы инвертировать разряд этот, вы очень помогли!!!
Остальные ответы
Молот Шотландцев Высший разум (301473) 1 месяц назад
Не знаю как инвертировать крайний правый разряд
Сильно подозреваю что "крайний правый разряд" это последняя циферка в числе. В двоичной записи - не циферка, а бит, либо 0, либо 1. Значит если там 0 - заменяем его на 1. И наоборот. Вот мы его таким Макаром и "инвертировали"
Денис ФадеевУченик (105) 1 месяц назад
Спасибо за ответ, но я знаю что это значит, я не знал как это сделать, но мне подсказали уже.
Андрей Высший разум (467197) 1 месяц назад
 123 -> 11[1101(1)] -> 11[1101(0)] -> 11010 -> 26 
Нам надо найти первое число больше 120 у которого после инверсии правого бита будет нечётное кол-во единичных битов. Это число 123 и ответ: 26.

Для этого не нужно писать код.
Похожие вопросы