Для начала представим наш IP-адрес в двоичной системе. Переведем каждый байт отдельно. Имеем следующий IP-адрес: 00010100.00010001.00000000.00010000 Число после косой черты - количество единиц в маске подсети. Таким образом, маска подсети будет иметь вид: 11111111.11111111.11111111.11111100 Теперь найдем сетевой адрес, выполнив поразрядно логическое умножение IP-адреса на маску подсети. 00010100.00010001.00000000.00010000 - IP-адрес 11111111.11111111.11111111.11111100 - маска подсети 00010100.00010001.00000000.000100хх - сетевой адрес То есть минимальный адрес (заменяем "х" нулями) - 00010100.00010001.00000000.00010000 (20.17.0.16), а максимальный (заменяем "х" единицами) - 00010100.00010001.00000000.00010011 (20.17.0.19). ответом будут адреса из данного диапазона, то есть 20.16.0.17/30, 20.17.0.17/30, 20.17.0.18/30, 20.17.0.19/30.
program raf105;
var
a,i,j,s: integer;
f,st: string;
inA,inB: boolean;
begin
readln(a);
readln(f);
i:=1;
while i < length(f)-1 do
begin
st:= f[i] + f[i+1];
inA:= False;
inB:= False;
for j:=1 to length(st)-1 do
begin
if st[j] = 'a' then inA:= True;
if st[j] = 'b' then inB:= True;
end;
if (not inA) or (not inB) then
if st = 'bb' then
f[i+1]:= 'a'
else
f[i+1]:= 'b';
s:= s+1;
i+= 2;
end;
writeln(s);
for i:=1 to length(f)-1 do
write(f[i],' ');
end.
PascalABC00010100.00010001.00000000.00010000
Число после косой черты - количество единиц в маске подсети. Таким образом, маска подсети будет иметь вид:
11111111.11111111.11111111.11111100
Теперь найдем сетевой адрес, выполнив поразрядно логическое умножение IP-адреса на маску подсети.
00010100.00010001.00000000.00010000 - IP-адрес
11111111.11111111.11111111.11111100 - маска подсети
00010100.00010001.00000000.000100хх - сетевой адрес
То есть минимальный адрес (заменяем "х" нулями) - 00010100.00010001.00000000.00010000 (20.17.0.16), а максимальный (заменяем "х" единицами) - 00010100.00010001.00000000.00010011 (20.17.0.19).
ответом будут адреса из данного диапазона, то есть 20.16.0.17/30, 20.17.0.17/30, 20.17.0.18/30, 20.17.0.19/30.