0810京东笔试第一批

第一题

385caaaa96f1f2d0b453f6dd7bfaa2cfjpeg
比较巧妙的就是 0,1,2,3控制方向,本身是逆时针的,左转的话就是
(d+1)%4,右转的话就需要(d+3)%4。
原地不动的话就contiune

res=input()
ne=[[0,1],[-1,0],[0,-1],[1,0]]
#分别表示 上,左,下,右 ,0,1,2,3
x,y,d=0,0,0
for i in res:
    if i=="w":
        x,y=x+ne[d][0],y+ne[d][1]
    elif i=="A":
        d=(d+1)%4 #左转90度
    elif i=="D":
        d=(d+3)%4 #右转90度
    else:
        continue
print(x,y)

第二题

d0f5d20149c72940e40d3fb1ee291117jpeg
首先考虑数组中会出现重复元素,比如 2 2 3 3 ,如果目标是5的话,有4种情况
其实就是需要考虑次数,使用map将次数存起来,找到的话就相乘
遍历:for k,v in mapp.items()

a,x=map(int,input().split())
from colletion import counter
n=list(map(int,input().split()))
mapp=Counter(n)
#有每个元素以及他们出现的次数
ans=0
for k,v in mapp.items():
    ans+=mapp.get(x-k,0)*v
    #get(x-k,0)找字典中x-k出现的次数,找不到就返回0
print(ans)

第三题

f892086756c58246aa812b5b7a5a926djpeg
每个数都可以+1或者✖️2,找到最大的那个数是怎么从0变的。
遍历一遍,看一个数要经历多少变化,如果这个次数够大的话,就更新现在的答案。

t=int(input())
for i in range(t):
    n=int(input())
    l=list(map(int,input().split()))
    ans=0
    last=0
    for i in l:
        cnt=0
        if i%2==1:
            i-=1
        else:
            i=i//2
        cnt+=1
        if cnt>last:
            ans+=cnt-last
        last=cnt
    print(ans)

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐