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运算是否相等