Задание 13. Информатика. ЕГЭ. Шастин. 29.08.2024

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

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске.

Сеть с маской \(255.255.240.0\) содержит узел с IP-адресом \(228.172.236.0\). Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно \(5\)?

В ответе укажите только число.

Решение:

Маска сети в двоичном виде имеет вид \(11111111.11111111.11110000.00000000_2\), т.е. для узла в сети выделяются \(12\) младших разрядов. Поэтому, номер узла в сети может принимать значения от \(0\) до \(2^{12}-1 = 4095\).

C++


#include<iostream>

using namespace std;

int digs(unsigned n) {
    int q = 0;

    for (; n ; n >>= 1) q += n & 1;
    return q;
}

int p2 (int n) {
    return n ? 2 * p2(n-1) : 1;
}

int32_t main() {
    unsigned mask = (255 << 24) + (255 << 16) + (240 << 8);
    unsigned ip = (228 << 24) + (172 << 16) + (236 << 8);
    unsigned net = mask & ip;

    int q = 0;

    for (int i = 0; i < p2(12); i++) 
        q += int(digs(net + i) % 5 != 0);
            
    cout << q << endl;
}

Ответ: \(3381\)