第一题题目大意:牛牛到老师家,从家里出发时朝北,之后就是左拐右拐等等到老师家,
设转向的次数为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果真不容易啊,还有许许多多的东西需要弥补了。