На вход алгоритма подаётся натуральное число N.
На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N четно, то к двоичной записи числа слева дописывается "10"
б) если число N нечетно, то к двоичной записи числа справа дописывается "01"
Полученная таким образом запись является двоичной записью искомого числа K
3. Результат переводится в десятичную систему и выводится на экран.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается висло R, большее чем 140. В ответе запишите это число в десятичной системе счисления. (Python)
Кто сможет решить?
Задача решается БЕЗ программирования.
Если число чётно, оно остаётся чётным. Чтобы получилось число > 140, к исходному числу должно прибавляться 128 (наибольшая степень 2 <= 140), а само исходное число будет лежать в диапазоне 32..63 (при < 32 будет прибавляться 64 - слишком мало, при >= 64 будет прибавляться уже 256 - избыточно много). Берём минимальное чётное 32: 32 + 128 = 160 > 140. Подходит.
Если число нечётно, оно остаётся нечётным. При этом исходное число умножается на 4 и к нему прибавляется 1. Берём минимальное нечётное > 140: (141 - 1) / 4 = 35. нечётное, подходит.
32 < 35 и ответ: 32
print(32)
def find_min_N():
for N in range(1, 1000): # Начинаем с 1 и проверяем все числа до 1000 (достаточно большой диапазон)
bin_N = bin(N)[2:] # двоичное представление числа N без префикса '0b'
if N % 2 == 0: # если N четное
bin_R = '10' + bin_N
else: # если N нечетное
bin_R = bin_N + '01'
# преобразуем двоичную строку обратно в десятичное число
R = int(bin_R, 2)
if R > 140:
return N # возвращаем первое найденное число N
min_N = find_min_N()
print(min_N)
или можно еще проще
print(next(N for N in range(1, 1000) if (int(('10' + bin(N)[2:]) if N % 2 == 0 else (bin(N)[2:] + '01'), 2) > 140)))
Никто.. ФУх, успел, посмотри мои ответы