华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)

试题为今天考试时记下,记于此仅做学习分享。侵删。

答案思路仅供参考,肯定有更优的办法!第三题没解出来,欢迎大家评论提点!

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第1张图片

第一题:

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第2张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第3张图片

这道题对输入做切分(调用split()方法)后,进行反复的10-2进制转换即可。

注意点:按位与用单个“&”符号。

#!/usr/ip2in/env python3
# -*- maskipoding: utf-8 -*-
"""
created on Wed Mip1r 13 19:43:05 2019
huawei1 - 100%
@author: youxinlin
"""
        
ip1,ip2,maskip = input().split()

ip1 = ip1.split('.')
ip2 = ip2.split('.')
maskip = maskip.split('.')

new_ip1 = []
new_ip2 = []

for i in range(len(ip1)):
    new_ip1.append(str(int(ip1[i])&int(maskip[i])))
    new_ip2.append(str(int(ip2[i])&int(maskip[i])))
    
res = 1
for i in range(len(ip1)):
    if new_ip1[i]!=new_ip2[i]:
        res = 0
        break
print(res,'.'.join(new_ip1))

第二题:

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第4张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第5张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第6张图片

这道题可以参考LeetCode85:https://blog.csdn.net/u014626513/article/details/81381948

这种思路是比较清晰的:遍历每一行的每个元素,进行向下(列方向)和向右(行方向)的搜索并计数,从而得到以每个元素为左上角顶点的最大正方形。此处还可以优化一下减少运算量,即遍历元素时,若该元素右边或下边的元素个数已经少于目前得到的最大正方形的边长,那么就直接停止遍历搜索。

高级一点的思路:采用动态规划,用计数矩阵记录个数,运算量更少。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 13 20:06:52 2019
huawei2 -100%
@author: youxinlin
"""

def calMAX1(matrix):
    
    res = 0
    hang = len(matrix)
    lie = len(matrix[0])
    countMatrix = [[0 for i in range(lie)] for i in range(hang)] #生成0矩阵

    for i in range(hang):
        for j in range(lie):
            #遍历
            if i==0 or j==0:
                countMatrix[i][j] = int(matrix[i][j])
            else:
                if matrix[i][j]!='0':
                    countMatrix[i][j] =  min( countMatrix[i-1][j] , countMatrix[i][j-1], countMatrix[i-1][j-1]) +1 #查询周边元素并累加
                else:
                    countMatrix[i][j]=0
            res = max(res,countMatrix[i][j])
            
    return res**2 

matrix = []
n = int(input()) #有几行
for i in range(n):#输入每一行,str形式
    matrix.append (list( input()))
    
if  len(matrix[0])==0:
    print(0)
else:
    print(calMAX1(matrix))

第三题:

 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第7张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第8张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第9张图片

华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)_第10张图片

没有通过。(case通过率30%)

主要难点在于打掉的怪兽会变成陆地(1),那么就要更新矩阵,重新搜索当前点到下一个最近等级的怪兽的路径,如果遍历可能运算量会爆炸,采用深度优先算法,优先查询未走过的路,可能运算速度会快一些。

你可能感兴趣的:(Python,各大厂算法方向编程机考题合集)