25秋招—0810京东笔试第一批(3道编程)

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)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值