题解 | #杨辉三角的变形#

杨辉三角的变形

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

当成数学高考题来做了:
图片说明
懒得算了,反正蒙对了

全部评论

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务