0810京东笔试第一批
第一题
比较巧妙的就是 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)
第二题
首先考虑数组中会出现重复元素,比如 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)
第三题
每个数都可以+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)