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面试的专属专栏,我会把自己的解法更新在里面,我会尽量写清楚自己的思路以及多写关键注释,希望对阅读的人有帮助~~~

全部评论

相关推荐

醉蟀:你不干有的是人干
点赞 评论 收藏
分享
04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务