ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

牛客华为机试HJ39

2022-04-20 08:00:16  阅读:184  来源: 互联网

标签:bin return mask ip2 牛客 HJ39 ip1 机试 valid


原题传送门

1. 题目描述

2. Solution

1、思路
把ip全转换为32bit 字符串,模拟与运算。
2、实现

import sys

if sys.platform != "linux":
    file_in = open("input/HJ39.txt")
    sys.stdin = file_in

"""
若IP地址或子网掩码格式非法则输出1,若IP1与IP2属于同一子网络输出0,若IP1与IP2不属于同一子网络输出2。
"""


def is_valid_ip(s):
    if ".." in s:
        return False
    for x in list(map(int, s.split("."))):
        if x < 0 or x > 255:
            return False
    return True


def is_valid_mask(mask):
    if not is_valid_ip(mask):
        return False
    mask_bin = ip2bin(mask)
    if '0' not in mask_bin or '1' not in mask_bin or '01' in mask_bin:
        return False
    return True


def int2bin(n):
    n_bin = bin(n).replace("0b", "")
    return f'{"0" * (8 - len(n_bin))}{n_bin}'


def ip2bin(s):
    nums = list(map(int, s.split(".")))
    return "".join([int2bin(x) for x in nums])


def solve(ip1, ip2, mask):
    if not is_valid_ip(ip1) or not is_valid_ip(ip2) or not is_valid_mask(mask):
        print(1)
        return
    ip1_bin = ip2bin(ip1)
    ip2_bin = ip2bin(ip2)
    mask_bin = ip2bin(mask)
    for i in range(32):
        if mask_bin[i] == '0':
            continue
        if ip1_bin[i] != ip2_bin[i]:
            print(2)
            return
    print(0)


while True:
    try:
        mask = input().strip()
        ip1 = input().strip()
        ip2 = input().strip()
        solve(ip1, ip2, mask)
    except:
        break

标签:bin,return,mask,ip2,牛客,HJ39,ip1,机试,valid
来源: https://www.cnblogs.com/junstat/p/16168268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有