阿里巴巴3.14笔试编程题
1.
def count2(x): if x < 0: x = x & 0xffffffff bin2 = str(bin(x))[2: ] result = 0 for i in str(bin2): if i == '1': result += 1 return result x = str(input()) y = int(x, 16) print(count2(y))
2.(补一下第二题的思路)
只要求出0点所在的行和列(四个方向)有没有1就可以了。
但是貌似python不支持列的区间表达式,所以先求原始矩阵的0所在行有没有1,再将矩阵90°旋转之后求新的矩阵的0所在行有没有1,最后结果相加即可。边界处理的话就是在矩阵外面围一层2即可。
def light(array): result = 0 for i in range(1, len(array) - 1): for j in range(1, len(array[0]) - 1): if array[i][j] == 1: continue else: if 1 in array[i][1: j]: result += 1 if 1 in array[i][j + 1: ]: result += 1 return result arr = [] nm = list(map(int, input().strip().split())) t1 = [2] * (nm[1] + 2) arr.append(t1) for i in range(nm[0]): temp = list(map(int, input().strip().split())) temp = [2] + temp + [2] arr.append(temp) arr.append(t1) arr2 = list(map(list, zip(*arr)))[:: -1] print(light(arr) + light(arr2))
3.
没时间看了😂
#暑期实习##笔经##阿里巴巴##java工程师#