HJ39 题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
#和18题有点类似
#思路:
#判断输入是否合法
#进行运算,判断是否在同一子网
#ip格式
def checkip(s):
a=s.split(".")
for i in range(len(a)):
a[i]=int(a[i])
for i in a:
if 0<=i<=255:
continue
else:
return False
return True
#子网掩码格式
def checkmask(s):
a=s.split(".")
for i in range(len(a)):#判断范围
a[i]=int(a[i])
if not 0<=a[i]<=255:
return False
for i in range(len(a)):
a[i]=bin(a[i])[2:]#转为二进制字符串,去掉前缀
a[i]='0'*(8-len(a[i]))+a[i]#补0
b="".join(a)
if "10" in b and len(b.split("10"))==2:#检验前面全1后面全0
c=b.split("10")
if c[0].count("1")==len(c[0]) and c[1].count("0")==len(c[1]):
return True
else:
return False
#运算
def op(mask,ip1,ip2):
a=mask.split(".")
b=ip1.split(".")
c=ip2.split(".")
for i in range(len(a)):
a[i]=int(a[i])
b[i]=int(b[i])
c[i]=int(c[i])
if a[i]&b[i]==a[i]&c[i]:
continue
else:
return 2
return 0
mask=input()
ip1=input()
ip2=input()
if not checkip(ip1) or not checkip(ip2) or not checkmask(mask):
print(1)
else:
print(op(mask,ip1,ip2))
#华为##华为od##华为机试##华为od机试#华为HJ103所有解法 文章被收录于专栏
这是我准备华为od面试的专属专栏,我会把自己的解法更新在里面,我会尽量写清楚自己的思路以及多写关键注释,希望对阅读的人有帮助~~~
查看12道真题和解析