Объяснение:
C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void main()
{
setlocale(0, "rus");
int mas[5][5];
srand(time(NULL));
cout << "Первоначальный массив" << endl;
for (int i = 0; i<5; i++){
cout << endl;
for (int j = 0; j<5; j++){
mas[i][j] = rand() % 10;
cout << mas[i][j] << " ";
}
cout << endl;
}
cout << "Полученный массив" << endl;
for (int i = 0; i<5; i++){
int tmp = mas[i][i];
mas[i][i] = mas[i][5 - i - 1];
mas[i][5 - i - 1] = tmp;
}
cout << endl;
for (int i = 0; i<5; i++){
cout << endl;
for (int j = 0; j<5; j++){
cout << mas[i][j] << " ";
}
cout << endl;
}
}
0
Переведем ip-адреса в двоичную систему:
121.171.5.70 = 01111001.10101011.00000101.01000110
121.171.5.107 = 01111001.10101011.00000101.01101011
По условию адреса находятся в одной сети, то есть смотрим совпадающие биты ( выделены жирным).
Получается адрес сети:
01111001.10101011.00000101.01000000
А маска :
11111111.11111111.11111111.11000000
Нам надо найти наименьшее количество адресов, то есть попробуем изменить маску, добавив один бит: 11111111.11111111.11111111.11100000
Применив поразрядную конъюнкцию вычисляем адрес сети для обоих адресов:
01111001.10101011.00000101.01000000
01111001.10101011.00000101.01100000
Как видим адреса сетей разные, что не соответствует условию задачи.
Поэтому подходящая маска для наименьшего количества адресов:
11111111.11111111.11111111.11000000
количество возможных адресов: 2⁶ = 64
ответ: 64