携程笔试4.14

菜鸡继字节后第二次akhhhhhh,虽然难度不是很大

第一题

画U,模拟

n = int(input())
temp = '*' * n + '.' * (2 * n) + '*' * n
grid = [temp for _ in range(4*n)]
for i in range(3*n, 4*n):
    temp = i - 3 * n + 1
    grid[i] = '.' * temp   + '*' * n + '.' * (2 * n - 2 * temp) + '*' * n + '.' * temp
for i in range(4*n):
    print(grid[i])

第二题

from collections import defaultdict
n = 3  
nums = [2, 3, 3]
pattern = 'BBB'
h_b = defaultdict(int)
h_r = defaultdict(int)
for i in range(len(nums)):
    if pattern[i] == 'B':
        h_b[nums[i]] += 1
    else:
        h_r[nums[i]] += 1
res = 0
for key in list(set(h_b.keys()) - (set(h_b.keys()) - set(h_r.keys()))):
    res += h_b[key] * h_r[key]
print(res)

第三题

脑补了一下大致可行就写了 可是偶数那个一开始写错了 debug了半小时 最后发现是'100101'这种情况,一开始想着第一个是1就一定是1了。

string = input()
if len(string) % 2 == 0:
    p = 1
    res1 = 0
    for i in range(len(string)):
        if string[i] == '0':
            res1 += abs(i - p)
            p += 2
    p = 1
    res2 = 0
    for i in range(len(string)):
        if string[i] == '1':
            res2 += abs(i - p)
            p += 2  
    res = min(res1, res2)    
else:
    temp = 0
    for i in range(len(string)):
        if string[i] == '1':
            temp += 1
        else:
            temp -= 1
    if temp > 0:
        p =  0
        res = 0
        for i in range(len(string)):
            if string[i] == '1':
                res += abs(p - i) 
                p += 2
    else:
        p = 0
        res = 0
        for i in range(len(string)):
            if string[i] == '0':
                res += abs(p - i) 
                p += 2        
print(res)

第四题

动态规划
dp[i][j],i是数的下标,j是0-8,表示除以9的余数
可以优化为2*9的不然会爆内存

string = input()
dp = [[0] * 9 for _ in range(2)]
remain = int(string[0]) % 9 
dp[0][remain] = 1
mod = 10 ** 9 + 7
for i in range(1, len(string)):
    for j in range(9):
        temp = (j - int(string[i])) % 9 
        if j == int(string[i]) % 9:
            dp[1][j] = (dp[0][j] + dp[0][temp] + 1) % mod
        else:
            dp[1][j] = (dp[0][j] + dp[0][temp]) % mod
    dp[0] = dp[1][:]
print(dp[-1][0])
#携程笔试##春招##实习##笔试题目##校招#
全部评论
大佬!这里也写了一篇题解:https://tans.fun/archives/xiecheng  感兴趣的小伙伴可以看看
3 回复 分享
发布于 2022-04-14 21:28
请问大佬可以讲下第四题的思路么
点赞 回复 分享
发布于 2022-04-14 21:15
求大佬讲第四题思路
点赞 回复 分享
发布于 2022-04-14 21:21

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
11 34 评论
分享
牛客网
牛客企业服务