容我说一句,这题就不是为了考找规律。

要大家都找规律有啥意思了。

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);
        }
        
        
    }
    
}