CSDN话题挑战赛第2期
参赛话题:面试宝典
众人拾柴火焰高,我们一起携手共筑面试宝典,可以将各语言各技术各类面试真题或者你刷过的面试题汇聚于此,金九银十之际,让我们助应聘同学一臂之力~
面试流程
面试流程有七步:
(1)问候场白;
(2)公司简介、职位简介;
(3)面试流程介绍;
(4)围绕简历提问;
(5)试探性提问;
(6)轻松题;
(7)向面试官提问;
面试题
面试题一:
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
问题剖析:
看题目找规律
问题解答:
N=int(input())
if N==1:
print('1')
else:
L=[[0]*N for i in range(N)]
L[0][0]='1'
for i in range(1,N):
L[i][0]=str(int(L[i-1][0])+i)
#print(L)
for i in range(N-2,-1,-1):
for j in range(1,N):
if L[i+1][j-1]==0:
pass
else:
L[i][j]=str(int(L[i+1][j-1])+1)
#print(L)
for i in L:
while 0 in i:
i.remove(0)
for i in L:
print(' '.join(i))
面试题二:
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
问题剖析:
1,这个题目如果用数组来做,及有树代表1,无树代表0,很好解题,但是我尝试了一下,提示报错“超出限制”,所有我用了另外一种方式。
2,将两个有重复的区域合并为一个区域,及最后只需要计算不包含的区域的树即可
问题解答:
lon, area = map(int, input().split())
list1 = []
for i in range(0, area):
start, end = map(int, input().split())
list1.append((start, end))
def hbArr(arr):
for a in range(0, len(arr) - 1):
if(a+1<len(arr)):
for b in range(a + 1, len(arr)):
a1, a2, a3, a4 = arr[a][0], arr[a][1], arr[b][0], arr[b][1]
tmp = [a1,a2,a3,a4]
tmp.sort()
xx1 = str(a1) + "_" + str(a2)
xx2 = str(a3) + "_" + str(a4)
xx = str(tmp[0]) + "_" + str(tmp[1])
#通过排序的方式确定两个区域是否有重合部分
if (not (xx == xx1) and not(xx==xx2) ) or (xx ==xx1 and a2==a3 )or (xx ==xx2 and a4==a1) :
arr.pop(b)
arr.pop(a)
arr.append((tmp[0], tmp[3]))
hbArr(arr)
break
return arr
list2 = hbArr(list1)
sum = 0
for i in list2:
sum+= i[1]-i[0]+1
print(lon+1-sum)