试题为今天考试时记下,记于此仅做学习分享。侵删。
答案思路仅供参考,肯定有更优的办法!第三题没解出来,欢迎大家评论提点!
第一题:
这道题对输入做切分(调用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))
第二题:
这道题可以参考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))
第三题:
没有通过。(case通过率30%)
主要难点在于打掉的怪兽会变成陆地(1),那么就要更新矩阵,重新搜索当前点到下一个最近等级的怪兽的路径,如果遍历可能运算量会爆炸,采用深度优先算法,优先查询未走过的路,可能运算速度会快一些。