Задание 5. Информатика. ЕГЭ. Демо-2025

Просмотры: 559
Изменено: 24 ноября 2024

На вход алгоритма подаётся натуральное число \(N\). Алгоритм строит по нему новое число \(R\) следующим образом.

  1. Строится двоичная запись числа \(N\).
  2. а) если число чётное, то к двоичной записи числа слева дописывается \(10\);
    б) если число нечётное, то к двоичной записи числа слева дописывается \(1\) и справа дописывается \(01\).
    Полученная таким образом запись является двоичное записью искомого числа \(R\).
  3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа \(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\)