Top.Mail.Ru
Ответы

На вход алгоритма подаётся натуральное число 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

1
 print(32) 
Аватар пользователя
Просветленный
12345678910111213141516
 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) 

или можно еще проще

1
 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))) 
Аватар пользователя
Мастер

Никто.. ФУх, успел, посмотри мои ответы