Так как первые два байта слева в IP-адресе узла и адресе сети совпадают, значит, в маске для получения такого результата при поразрядной конъюнкции в двоичной системе должны быть все единицы. В маске 16 единиц есть
Разложение третьих чисел в адресах
номер 7 6 5 4 3 2 1 0
59(10)=0 0 1 1 1 0 1 1
65(10)=0 0 1 0 0 0 0 1
как видно полное совпадение видно в первых трех разрядах слева, значит 16+3=19 единиц в маске уже есть, но возможны еще...
Если биты пронумеровать справа налево
Для 4-го и 3-го бита получаем: ? & 0 = 0 -> в маске может находиться как единица, так и 0. Но так как по заданию у нас спрашивается наибольшее возможное количество единиц, то значит, необходимо сказать, что в маске данный бит равен 1.
Для 2-го бита получаем: ? & 1 = 0 -> в маске может находиться только 0.
Поэтому выходит что максимальное значение единиц в маске 19+2=21
Так как первые два байта слева в IP-адресе узла и адресе сети совпадают, значит, в маске для получения такого результата при поразрядной конъюнкции в двоичной системе должны быть все единицы. В маске 16 единиц есть
Разложение третьих чисел в адресах
номер 7 6 5 4 3 2 1 0
59(10)=0 0 1 1 1 0 1 1
65(10)=0 0 1 0 0 0 0 1
как видно полное совпадение видно в первых трех разрядах слева, значит 16+3=19 единиц в маске уже есть, но возможны еще...
Если биты пронумеровать справа налево
Для 4-го и 3-го бита получаем: ? & 0 = 0 -> в маске может находиться как единица, так и 0. Но так как по заданию у нас спрашивается наибольшее возможное количество единиц, то значит, необходимо сказать, что в маске данный бит равен 1.
Для 2-го бита получаем: ? & 1 = 0 -> в маске может находиться только 0.
Поэтому выходит что максимальное значение единиц в маске 19+2=21
program twonumbers;
var
first, second: integer;
begin
read(first, second);
if ((first + second) mod 3 = 0) then
write(first * second)
else
begin
first := first * 2;
second := second * 2;
write(first, ' ', second);
end;
end.
Объяснение:
program twonumbers; // Название программы
var
first, second: integer; // Целочисленные переменные, хранящие вводимые с клавиатуры значения
begin // Начало программы
read(first, second); // Считываем 2 целых числа с клавиатуры
if ((first + second) mod 3 = 0) then // Если сумма чисел кратна 3
write(first * second) // Выводим их произведение
else // Иначе
begin // Начало цикла
first := first * 2; // Увеличиваем первое вдвое
second := second * 2; // Увеличиваем второе вдвое
write(first, ' ', second); // Выводим их
end; // Конец цикла
end. // Конец программы