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

杨辉三角的变形

http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43

非取巧找规律 完整获取杨辉三角变形详解
方法1:本人 python解

while True:
    try:
        n = int(input())
        if n <= 2:
            print(-1)
        L0 = []
        L1 = []
        for i in range(n):
            if i == 0:
                L0.append(1)
                L1 = []
            elif i == 1:
                L0 = [1]
                L1 = [1, 1, 1]
            else:
                L0 = list(L1)
                L1 = []
                m = len(L0) + 2
                for ii in range(m):
                    if ii == 0:
                        L1.append(L0[ii])
                    elif ii == 1:
                        L1.append(L0[ii - 1] + L0[ii])
                    elif ii == (m-1):
                        L1.append(1)
                    elif ii == (m - 2)and((m-2)>2):
                        L1.append(L0[-1] + L0[-2])
                    else:
                        L1.append(L0[ii - 2] + L0[ii - 1] + L0[ii])

        num = 0
        for pos in range(len(L1)):
            if L1[pos] %2 ==0:
                num = pos +1
                break
        if num == 0:
            print(-1)
        else:
            #print(L1)
            print(num)
    except:
        break

i 是 第i行。ii代表第ii列。
方法2:python

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

方法3:python 找规律
//杨辉三角规律 行号 第一个偶数在该行第几个
// 1 1 -1
// 1 1 1 2 -1
// 1 2 3 2 1 3 2
// 1 3 6 7 6 3 1 4 3
// 1 4 10 16 19 16 10 4 1 5 2
// 1 5 15 30 45 51 45 30 15 5 1 6 4
//

while True:
    try:
        n = int(raw_input())
        ans = -1
        if n <= 2:
            ans = -1
        elif n % 2 == 1:
            ans = 2
        elif n % 4 == 0:
            ans = 3
        else:
            ans = 4
        print ans
    except:
        break
全部评论

相关推荐

new和malloc的区别?c++里new了数组怎么释放?32位系统的指针变量占多大字节?int*呢?空类呢?c++多态?为什么需要虚析构?虚析构实现原理?c++可以不写构造函数吗?编译器默认除了构造还会有什么?深拷贝和浅拷贝区别?智能指针哪个c++版本引入的,作用?用过哪些容器?项目里用了哪些容器?为什么用qlist?qmap什么是key?模板的好处?什么时候会用?设计模式了解哪些?自己写过吗?单例模式怎么写?单例要返回非静态指针类型怎么弄?队列和栈的区别?osi七层以及相应协议?网络层的协议?应用层?一些项目问题...网络加密算法知道哪些?tcp的三次握手四次挥手回收写过吗?写服务器基本模...
AI牛可乐:哇,你分享了好多面试经验呢,听起来你准备得很充分呢!👍 关于你提到的技术问题,我来帮你解答一下吧: 1. `new` 和 `malloc` 的区别?`new` 会自动调用构造函数,而 `malloc` 只负责分配内存。`new` 数组释放时用 `delete[]`,比如 `delete[] myArray;`。 2. 在32位系统中,指针变量通常占4个字节,`int*` 也是如此。 3. 空类的实例通常占1个字节,但具体实现可能不同。 4. C++多态允许我们通过基类指针或引用来调用派生类的函数。需要虚析构是因为基类指针可能指向派生类对象,不使用虚析构可能导致派生类析构函数不被调用。 5. 如果不写构造函数,编译器会提供一个默认构造函数。默认构造函数会进行成员变量的默认初始化。 6. 深拷贝和浅拷贝的区别在于,深拷贝会复制对象的所有字段,包括指向的内存内容;浅拷贝只复制对象的字段值,不复制指向的内存内容。 7. 智能指针是在C++11版本引入的,用于自动管理内存,防止内存泄漏。 8. 常用的容器有 `vector`、`list`、`map` 等。具体使用哪个容器取决于项目需求。 关于你问的其他问题,我简单回答一下: - `QList` 通常用于需要频繁插入和删除的场景。 - `QMap` 的 `key` 是映射表中的键值。 - 模板的好处是提高代码复用性,减少代码冗余。 - 设计模式有很多种,比如单例模式、工厂模式等。单例模式可以通过静态成员函数实现。 现在,悄悄告诉你一个小秘密,点击我的头像,我们可以私信聊天哦~🎉 那么,你平时在项目中都用过哪些容器呢?有没有什么特别的经验或者技巧可以分享的呢?😊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务