选择题30道,一道2分,难度正常,大多数为常见的一些数理统计的一些计算题和机器学习的基本知识。
编程题2道,一道20分,难度中等,基本只是想考察逻辑思路,不需要太深的数据结构算法。
第一题(广度搜索 AC)
给定一个正整数n,找出最少需要多少个完全平方数,使得他们的和等于n,比如12=4+4+4,返回3 输入: 12 输出: 3
思路:先获取可能组成的n的所有平方数,如题的12,可以选取的平方数有1,4,9,由于要求的只是组成的个数,所以我们直接用广度搜索就完事,啥时候发现正好加上去得到n,就可以结束搜索并输出层数。
def guang(n,key):
quene = key.copy()
result = 1
while True:
# print(quene)
breakSign=False
for num in quene:
if num == n:
breakSign=True
if breakSign:
break
son = []
for num in quene:
son1 = []
if num>n:
continue
for i in key:
son1.append(num+i)
son.extend(son1)
quene = son.copy()
result+=1
# print(result)
return result
n = int(input())
# print(n)
key=[]
for i in range(int(n**0.5)+1):
key.append(i**2)
if key[-1]>n:
key.pop()
key.reverse()
print(guang(n,key))
第二题(暴力遍历 AC)
给定一个由0和1组成的二维矩阵,返回该矩阵中最大的由1组成的正方形 输入: 4,5 1,0,1,0,0 1,0,1,1,1 1,1,1,1,1 1,0,0,1,0 输出: 4
思路:因为是在笔试,时间有限,所以就直接采取了很暴力的解法:从左到右、从上到下遍历。当遇到1时,则搜索以当前位置为正方形的左上角,可以构建多大的正方形。循环玩即可得到问题的解。
# inde为当前的位置
# 函数所返回的值为以当前inde为正方形的左上角,可构成的最大正方形的边长
def test(T,inde,M,N):
max_lengh = min(M - inde[0],N - inde[1])
result = 1
for i in range(1,max_lengh):
for j in range(i+1):
if T[inde[0]+i][inde[1]+j]=='0' or T[inde[0]+j][inde[1]+i]=='0':
return result
result+=1
return result
a = input().split(',')
M = int(a[0])
N = int(a[1])
T = []
for i in range(M):
a = input().split(',')
T.append(a)
# print(T)
result = 0
for i in range(M):
if i+result>M:
continue
for j in range(N):
if j+result>N:
continue
if T[i][j]=='0':
continue
result=max(test(T,(i,j),M,N),result)
print(result**2)