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

Написать программу python

Scre4m Ученик (236), на голосовании 6 месяцев назад
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число
следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописывается три последние
двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится
в двоичную запись и дописывается в конец числа
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Укажите минимальное число R, большее 151, которое может быть получено с помощью
описанного алгоритма. В ответе это число запишите в десятичной системе счисления.
Голосование за лучший ответ
Стим Стимов Знаток (365) 7 месяцев назад
Исходя из условия алгоритма, найдем такое минимальное число N, для которого полученное число R будет больше 151.

Пусть N = 50. Его двоичная запись будет 110010. Поскольку 50 не делится на 3, то остаток от деления на 3 равен 2. Переводим 2 в двоичную систему: 10. Дописываем полученную двоичную запись к исходной, получаем: 11001010. Переводим это число в десятичную систему и получаем 202.

Теперь проверим, будет ли какое-то другое число меньше 202 давать результат больше 151. При проверке выясняется что это не так, таким образом, минимальное число R, большее 151, которое может быть получено с помощью описанного алгоритма, равно 202.

Ответ: 202.
Владислав Крамексов Гуру (3978) 7 месяцев назад
 def build_number_r(n): 
# Переводим число N в двоичное представление
binary_n = bin(n)[2:]

# Обработка числа в соответствии с условиями
if n % 3 == 0:
# Дописываем в конец трри последние двоичные цифры
binary_r = binary_n + binary_n[-3:]
else:
# Остаток от деления умножаем на 3 и переводим в двоичную запись
remainder = (n % 3) * 3
binary_remainder = bin(remainder)[2:]
binary_r = binary_n + binary_remainder

# Переводим результат в десятичную систему
r = int(binary_r, 2)
return r

# Начальное значение N
N = 1

# Искомое число R должно быть больше 151
while True:
R = build_number_r(N)
if R > 151:
print(f"The minimum number R that is greater than 151 is: {R}")
break
N += 1
Похожие вопросы