学习笔记 | 华为机试

面试题

1.判断两个IP是否属于同一子网

给定两个ip地址和一个子网掩码,让每一个ip的二进制位与掩码的二进制位做与运算,如果的得到的结果相同,则笔试两个ip属于同一个子网,此时输出1和第一个ip与掩码与后的结果,否则输出0和第一个ip与掩码与后的结果。

例如:

ip 1 地址:192.168.0.1

ip 2 地址:192.168.0.254

子网掩码:255.255.255.0

转化为二进制为:

ip 1 地址:11010000.10101000.00000000.00000001

ip 2 地址:11010000.10101000.00000000.11111110

子网掩码:11111111.11111111.11111111.00000000

分别与子网掩码进行AND

结果1:11000000.10101000.00000000.00000000

转化为十进制:192.168.0.0

结果2:11000000.10101000.00000000.00000000

转化为十进制:192.168.0.0

结果相同,属于同一子网

样例:

输入:192.168.0.1 192.168.0.254 255.255.255.0
输出:1 192.168.0.0

# 输入:192.168.0.1 192.168.0.254 255.255.255.0
# 输出:1 192.168.0.0


def func(nums):
    num1 = list(map(int, nums[0].split(".")))
    num2 = list(map(int, nums[1].split(".")))
    num = list(map(int, nums[2].split(".")))

    flag = True
    tmp = []
    for i in range(4):
        tmp.append(str(int(num1[i] & num[i])))

        if num1[i] & num[i] != num2[i] & num[i]:
            flag = False
            break

    ans = []
    if flag:
        ans.append(1)
    else:
        ans.append(0)
    ans.append(str(",".join(tmp)))
    return ans


nums = input().split()
ans = func(nums)
print(ans[0], ans[1])

2.最大正方形

leetcode链接:https://leetcode-cn.com/problems/maximal-square/

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

样例

输入:
    1 0 1 0 0
	1 0 1 1 1
	1 1 1 1 1
    1 0 0 1 0
输出:
    4

3.奥特曼打小怪兽。

有一个由0,1,2以及大于2的数字组成的矩阵,0表示陷阱,1表示陆地,奥特曼不可以走陷阱,可以走陆地,2以及大于2的数字表示奥特曼的等级,数字越大等级越高。奥特曼从矩阵的左上角(0,0)位置出发,只能由等级从弱到强去打小怪兽,每打完一个小怪兽,小怪兽所在的位置就变成了陆地。问奥特曼能不能打完所有的小怪兽。可以打完输出最少步数,否则输出-1;

输入:
    1 2 0
    0 3 4
    0 6 5
输出:
    5

你可能感兴趣的:(#,数据结构,刷题,面试)