题解 | #杨辉三角的变形#
杨辉三角的变形
http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43
受这个启发:
while True: try: n = int(input()) res = - 1 #初始化结果为-1 l = [[0]*(2*n+1) for _ in range(n)] #以n行的长度创建二维矩阵,每行开头插入2个0 l[0][2] = 1 #第一行起始值为1(因开头插入了两个0,所以第三位为1) for x in range(1,n): #构造完整的杨辉三角矩阵 for j in range(2,2*(x+2)-1): l[x][j] = l[x-1][j-2]+l[x-1][j-1]+l[x-1][j] for i in range(len(l[n-1][2:])): #遍历杨辉三角矩阵最后一行,去掉开始插入的两个0 if int(l[n-1][2:][i])%2 == 0: #如果发现偶数,输入下标,并把答案res置为!=-1的值 print(i+1) res = 0 break if res == -1: #如果前面没有找到偶数,那么res还是初始值,输出即可满足题意 print(-1) except: break
自己写了这个:因为不插入0占位,省内存,但if多了稍微慢些?
不过离超时或超内存远着呢
while 1: try: n = (int(input())) l=['start'] l1=[1] l2=[1,1,1] l.append(l1) l.append(l2) def get_ln(i): ln = [1] last = l[i-1] for ii in range(1,2*i-1): if ii ==1: t=last[0]+last[1] if ii>1 and ii<=2*i-4: t=last[ii]+last[ii-1]+last[ii-2] if ii == 2*i-3: t=last[ii-1]+last[ii-2] if ii == 2*i-2: t= 1 ln.append(t) # i-2行已经没必要放在内存了,但为了l的index不变,让它变空 l[i-2]=None return ln # get yanghui for i in range(3,n+1): l.append(get_ln(i)) f = -1 l_n = l[n] for e in l_n: if e%2 == 0: f=l_n.index(e)+1 break print(f) except: break
各类型占内存大小:(字节)
找规律(这样做其实跟编程关系不大了,成了数学题):
n>2时,第n行前3项为1, n-1, n(n-1)/2。第四项还没找到通式。看到第6行的输出应该是4,就直接蒙4,还真对了。
毕竟不是奥数题,可以多蒙答案。
敲一次print,比敲一堆print好:
while True: try: a,b = int(input()),0 if a%2 == 1: b = 2 elif a%4 == 0: b = 3 elif a < 3: b = -1 else: b = 4 print(b) except: break
当成数学高考题来做了:
懒得算了,反正蒙对了