数组经典题之杨辉三角变形

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组经典题之杨辉三角变形相关的知识,希望对你有一定的参考价值。

题目

杨辉三角变形
在这里插入图片描述

解决

可以把题目给的图变形成一个容易理解的三角形
在这里插入图片描述
可以看出每一个数都是上面的三个数的和。
我们可以将原图补全为一个完整的矩形,每一行的元素个数的都是2×行标-1。
在这里插入图片描述
因此我们可以搞出一个矩形,首先所有为止都填充为0,然后依次按照列赋值,其中每一行的第一列和最后一列的值为1,每一行的第二列和倒数第二列需要特殊处理,因为他们不够上一行的数不够三个,直接复制会越界。

解决

#include <iostream>
#include <vector>
using namespace std;

int find_index(int n)
{
    int m=2*n-1;//长为m,宽为n的矩形
    vector<vector<int>> vv(n,vector<int>(m,0));
    vv[0][0]=1;
    for(int i=1;i<n;i++)//按行
    {
        vv[i][0]=vv[i][2*i]=1;//每一行的第一个元素和最后一个元素是1
        for(int j=1;j<2*i;j++)//按列赋值
        {
            if(j==1)//第二列特殊处理
                vv[i][j]=vv[i-1][j]+vv[i-1][j-1];
            else if(j==2*i-1)//倒数第二列特殊处理
                vv[i][j]=vv[i-1][j-1]+vv[i-1][j-2];
            else//正常情况
                vv[i][j]=vv[i-1][j-2]+vv[i-1][j-1]+vv[i-1][j];
        }
    }
    
    for(int k=0;k<m;k++)//查找第n行第一个出现的偶数的下标
    {
        if(vv[n-1][k]%2==0)
        {
            return k+1;
        }
    }
    return -1;
    
}

int main()
{
    int n,index;
    while(cin>>n)
    {
        index=find_index(n);
        cout<<index<<endl;
    }
    
}

这道题关键就在于对于下标的精确把握,稍有不注意就会做错
在这里插入图片描述

以上是关于数组经典题之杨辉三角变形的主要内容,如果未能解决你的问题,请参考以下文章

Review系列前端经典题之对象调用数组方法

Review系列前端经典题之对象调用数组方法

寒假刷题之普通之变形课

前端面试题之手写promise

华为oj----iNOC产品部-杨辉三角的变形 .

华为机试题 HJ53杨辉三角的变形