记2018.3.27实习生网易笔试编程题

第一题题目大意:牛牛到老师家,从家里出发时朝北,之后就是左拐右拐等等到老师家,

设转向的次数为N,记录在字符串s中,例如s = ‘LRR’,L为左拐,R为右拐,求给定N,s下,牛牛最后所朝的方向(E,S,W,N)

我的解法:

N = input()
STR = input()
dN = ['N', 'W', 'E']       #记录当前朝向和左拐,右拐之后的朝向,分别是dN[0],dN[1], dN[2],下同
dW = ['W', 'S', 'N']
dS = ['S', 'E', 'W']
dE = ['E', 'N', 'S']
do = dN                   #初始朝向
for i in range(len(STR)):              #遍历字符串,并判断下一步朝向
    if STR[i] == 'L' and do == dN:
        do = dW
    elif STR[i] == 'R' and do == dN:
        do = dE
    elif STR[i] == 'L' and do == dS:
        do = dE
    elif STR[i] == 'R' and do == dS:
        do = dW
    elif STR[i] == 'L' and do == dW:
        do = dS
    elif STR[i] == 'R' and do == dW:
        do = dN
    elif STR[i] == 'L' and do == dE:
        do = dN
    elif STR[i] == 'R' and do == dE:
        do = dS
print(do[0])

测试通过。

第二题题目大意:

有一个数对(x, y),其中x<=n, y<=n, x 除以y的余数大于等于k,其中 n,k需要输入,最后求在n, k下 满足条件的数对有几个。

我的解法:

n = int(input())
k = int(input())
counter = 0
for i in range(1, n + 1):
    for j in range(1,n + 1):
        if i % j >= k:
            counter += 1

print(counter)

写的很简单,当然,网上的测试用例没有通过。。。还没想出来问题出在哪?遗憾。

第三题题目大意:  

有这样一个数列,1,12,123,1234,12345,......, 12345678910, 1234567891011, ....... 。求位于l和r之间的数中有几个能被3整除(l和r有大小限制

我的算法:

def get_L(r):
    L = ['1' for i in range(r + 1)]
    for i in range(1, r + 1):
        L[i] = L[i - 1] + str(i+1)
    return L

l = int(input())
r = int(input())
L = get_L(r)
counter = 0
for k in range(l, r + 1):
    if int((L[k])) % 3 == 0:
        counter += 1

print(counter)

办法比较笨,本地测试了少量能通过,但是网上测试没有通过,后来想想原因可能是列表生成的方法不好,非常耗时。

先把题目记录下来,再好好想想。非科班要想转CS果真不容易啊,还有许许多多的东西需要弥补了。


猜你喜欢

转载自blog.csdn.net/jiayangwu/article/details/79719802