Так как первые два байта слева в 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
// PascalABC.NET 3.3, сборка 1540 от 16.09.2017 // Внимание! Если программа не работает, обновите версию!
begin var n,p:integer; var s:string; for var a:=1 to 9 do for var b:=0 to 9 do for var c:=0 to 9 do begin n:=100*a+10*b+c; s:=(n*n).ToString.Right(3); p:=Pos(a.ToString,s); if p>0 then begin Delete(s,p,1); p:=Pos(b.ToString,s); if p>0 then begin Delete(s,p,1); if s=c.ToString then Write(n,'(',n*n,')',' ') end end end end.
Результат 205(42025) 376(141376) 421(177241) 625(390625) 963(927369)
Так как первые два байта слева в 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
// Внимание! Если программа не работает, обновите версию!
begin
var n,p:integer;
var s:string;
for var a:=1 to 9 do
for var b:=0 to 9 do
for var c:=0 to 9 do begin
n:=100*a+10*b+c;
s:=(n*n).ToString.Right(3);
p:=Pos(a.ToString,s);
if p>0 then begin
Delete(s,p,1);
p:=Pos(b.ToString,s);
if p>0 then begin
Delete(s,p,1);
if s=c.ToString then Write(n,'(',n*n,')',' ')
end
end
end
end.
Результат
205(42025) 376(141376) 421(177241) 625(390625) 963(927369)