数组经典题之杨辉三角变形
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;
}
}
这道题关键就在于对于下标的精确把握,稍有不注意就会做错
以上是关于数组经典题之杨辉三角变形的主要内容,如果未能解决你的问题,请参考以下文章