一开始的时候就是想直接写出来这个二维数组,然后找最后一行嘛,代码如下:
while True:
n = int(input())
lst = []
lst.append([0] * (2*n-1))
lst[0][n-1] = 1
for line in range(1, n):
new_line = []
for j in range(2*n-1):
if j == 0:
new_line.append(0 + lst[line-1][j] + lst[line-1][j+1])
elif j == 2*n-2:
new_line.append(lst[line-1][j-1] + lst[line-1][j] + 0)
else:
new_line.append(lst[line-1][j-1] + lst[line-1][j] + lst[line-1][j+1])
lst.append(new_line)
# print(lst)
line_n = lst[n-1]
output = -1
for num in range(len(line_n)):
if line_n[num] % 2 == 0:
output = num+1
break
print(output)
用这个去跑测试的时候发现会超时。仔细分析里面,两层大循环确实复杂度上去了。
然后看看有没有规律:
n out
1 -1
2 -1
3 2
4 3
5 2
6 4
7 2
8 3
9 2
10 4
11 2
12 3
13 2
14 4
15 2
这里用Tab给不同的答案分了一下,可以看出,1和2输出-1,奇数输出2,整除4输出3,余2输出4。那这就很简单了,判断n就可以:
n = int(input())
if n == 1 or n == 2:
print(-1)
elif n % 2 == 1:
print(2)
elif n % 4 == 0:
print(3)
elif n % 4 == 2:
print(4)



京公网安备 11010502036488号