while True:
try:
a=list(map(int,input().strip('\n').split('.')))
b=list(map(int,input().strip('\n').split('.')))
c=list(map(int,input().strip('\n').split('.')))
boolean=0
for i in range(0,len(a)-1):
if a[i]==0 and a[i+1]!=0:
boolean=1
break
elif a[i]<255 and a[i+1]>0:
boolean=1
break
elif a[i]^255!=255-a[i] or a[i+1]^255!=255-a[i+1]:
boolean=1
break
if len(a)!=4 or len(b)!=4 or len(c)!=4:
boolean=1
elif max(a)>255 or max(b)>255 or max(c)>255:
boolean=1
elif min(a)<0 or min(b)<0 or min(c)<0:
boolean=1
elif boolean!=1:
for i in range(0,4):
if a[i]&b[i]!=a[i]&c[i]:
boolean=2
print(boolean)
except:
break
首先,我们检验一下子网掩码是否左边全是1,右边全是0。
那么左边不全是1,右边不全是0的情况有:
1、x.x.0.y
2、1110111.x.x.x
3、255.y.0.0(y<255 &y>0)
然后,再检验三者的长度
三者中各自最大值,最小值是否超标
最后比较B与C与A的AND运算是否相等

京公网安备 11010502036488号