ПРОГРАММИРОВАНИЕ ПИТОН 11 КЛАСС (ПОПРОЩЕ ПЖ)
Автомат обрабатывает натуральное девятиразрядное число N по следующему алгоритму:
1. Находится сумма разрядов числа N.
2. Полученное число переводится в двоичную систему счисления.
3. К записи, полученной на предыдущем этапе, дописываются разряды по следующему правилу:
a) Если количество единиц четное дописывается единица слева и два нуля справа,
b) Если количество единиц нечетное дописывается 10 слева и 1 справа.
Полученная таким образом запись является двоичной записью искомого числа R.
Пример. Дано число N = 123456789. Алгоритм работает следующим образом:
1. Сумма разрядов 45.
2. Двоичная запись 101101.
3. Единиц четное количество, следовательно, получаем 1+101101+00 = 110110100.
4. 1101101002 = 436.
Сколько существует чисел N, для которых результат работы автомата равен 21?
Задание 4
На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Полученная запись переворачивается (записывается слева направо).
3. В полученной записи дублируется младший (правый) бит.
Полученная таким образом запись (в ней на один разряд больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Например, для числа 11 алгоритм будет выполняться следующим образом:
1. 11 = 10112.
2. 11012.
3. 110112 = 2710
Укажите минимальное число N в результате обработки которого получится число, большее 99. В ответе запишите это число в десятичной системе.
Первая задача
def sum_of_digits(n):
return sum(int(digit) for digit in str(n))
def process_number_task1(N):
#Перемеренные
digit_sum = sum_of_digits(N)
binary_sum = bin(digit_sum)[2:]
ones_count = binary_sum.count('1')
####
if ones_count % 2 == 0:
R_binary = '1' + binary_sum + '00'
else:
R_binary = '10' + binary_sum + '1'
R = int(R_binary, 2)
return R
#Получение данных
N = int(input("Введите число N для первой задачи: "))
result_task1 = process_number_task1(N)
print(f"Результат для первой задачи: {result_task1}")
Вторая задача
def process_number_task2(N):
binary_N = bin(N)[2:]
reversed_binary_N = binary_N[::-1]
R_binary = reversed_binary_N + reversed_binary_N[-1]
R = int(R_binary, 2)
return R
N = int(input("Введите число N для второй задачи: "))
result_task2 = process_number_task2(N)
print(f"Результат для второй задачи: {result_task2}")
Рекомендую самому проверить верно ли всё,это решение от Chat gpt 4o,немного улучшенное
bin(21)='0b10101'
a) Если количество единиц четное дописывается единица слева и два нуля справа,
b) Если количество единиц нечетное дописывается 10 слева и 1 справа.
Двух нулей справа нет. То есть исх нечётное кол-во единиц. Одна, то есть (убрать 10 слева 1 справа), сумма цифр =10b = 2dec
Задача свелась к поиску среди 9ти значных чисел с суммой цифр = 2.
Девятизначное == первое не нуль и ещё 8 цифр. Т.о первое - 2 и 8 нулей или первое 1 и 8 мест для второй единицы. Ответ - 9 штук.
______________________
4)
В двоичной записи числа N первый бит всегда 1, следовательно, в перевёрнутой записи два последних бита = 11
bin(99) ='0b1100011' при N=35= '0b100011'
т.о. искать N< 35, такое, чтобы при работе алгоритма получилось R> 99
for i in range(1,36):
R=bin(i)[2:]
R=R[::-1]+'1'
print(int(R,2),R,i)
в шаблон закинь
for n in range(1000):
n2 = bin(n)[2:] //перевод в 2-сис
if n2 % 2 == 0: //проверка на четность
Мне впадлу