一开始的时候就是想直接写出来这个二维数组,然后找最后一行嘛,代码如下:
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)