题解 | #杨辉三角的变形#
杨辉三角的变形
http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43
容我说一句,这题就不是为了考找规律。
要大家都找规律有啥意思了。
21/30通过,不知道问题出在哪。
思路大致上没问题,可能是哪里边界上有问题。
用二维数组(可看做矩阵)模拟该三角形的产生过程。
#include<stdio.h>
#include<string.h>
//这题我只有笨法写出,很拉。。。
//难道没有什么精妙绝伦的方法吗?
//假设该三角形有n行,则可设置这个三角形在一个n*2n-1的矩阵中
//每一行的第n列为中心元素,第i行的第n-i个元素到第n+i个元素为非0,其余均为0
//其中第n-i和第n+i个元素为1.
//其余元素为计算所得
//这内存不得爆炸了?
int n,val;
int **input;
int i=0,j=0,k=0,flag=0;
int main()
{
scanf("%d\n",&n);
val=n;
input=(int**)malloc(sizeof(int)*n);//申请行内存
for(i=0;i<n;i++)//建立n*2n矩阵
{
input[i]=(int*)malloc(sizeof(int)*(2*n-1));//申请列内存
for(j=0;j<2*n-1;j++)
{
input[i][j]=0; //初始化
}
input[i][n-i]=1;//边初始化
input[i][n+i]=1;
}
input[0][n]=1;
for(i=0;i<n;i++)//写矩阵各元素
{
for(j=n-i+1;j<n+i;j++)
{
input[i][j]=input[i-1][j-1]+input[i-1][j]+input[i-1][j+1];
}
}
for(i=0;i<2*n-1;i++)//输出
{
if((input[n-1][i]%2==0)&&(input[n-1][i]!=0))
{
printf("%d\n",i);
break;
}
else if((input[n-1][i]%2==1)&&(i==2*(n-1)))
{
int m=-1;
printf("%d",m);
}
}
}