Задание 5. Информатика. ЕГЭ. Демо-2025
- Просмотры: 559
- Изменено: 24 ноября 2024
На вход алгоритма подаётся натуральное число \(N\). Алгоритм строит по нему новое число \(R\) следующим образом.
- Строится двоичная запись числа \(N\). а) если число чётное, то к двоичной записи числа слева дописывается \(10\);
- Результат переводится в десятичную систему и выводится на экран.
б) если число нечётное, то к двоичной записи числа слева дописывается \(1\) и справа дописывается \(01\).
Полученная таким образом запись является двоичное записью искомого числа \(R\).
Например, для исходного числа \(4_{10} = 100_2\) результатом является число \(20_{10} = 10100_2\), а для исходного числа \(5_{10} = 101_2\) это число \(53_{10} = 110101_2\).
Укажите максимальное число \(R\), которое может быть результатом работы данного алгоритма, при условии, что \(N\) не больше \(12\). В ответе запишите это число в десятичное системе счисления.
Решение:
Python
def R(N):
b = bin(N)[2:]
if N % 2:
return int('1' + b + '01' , base=2)
else:
return int('10' + b , base=2)
a = []
for N in range(1, 13):
a.append(R(N))
print(max(a))
Python (решение с побитовыми операциями)
def digs(n):
return digs(n >> 1) + 1 if n else 0
def R(n):
if n & 1:
return ((n | 1 << digs(n)) << 2) | 1
return n | 2 << digs(n)
a = []
for N in range(1, 13):
a.append(R(N))
print(max(a))
C++ (решение с побитовыми операциями)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int digs(int n) {
return n ? digs(n >> 1) +1 : 0;
}
int R(int n) {
if (n & 1)
return ((n | 1 << digs(n)) << 2) | 1;
return n | 2 << digs(n);
}
int32_t main() {
vector<int> v;
for(int N = 1; N < 13; N++)
v.push_back(R(N));
cout << *max_element(begin(v), end(v)) << endl;
}
Ответ: \(109\)