第四范式2020校招-建模工程师

选择题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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值