先看题

我的思路是就是找规律,我发现这就是个残缺的二维数组,都是n行n列,只不过,第一行是n个数,往下依次递减(这个很容易实现,下面完整代码有注释),然后先算出第一列的数,也就是a[0][0],a[1][0],a[2][0],a[3][0],a[4]
[0],通过找规律(从上往下,每两个相差的依次是1 ,2 ,3 ,4),接着根据每一行的开头a[n][0]的值,以及在这一行里相邻数之间的差值关系,对每一个元素都赋值。
代码如下
(((((()
#include<stdio.h>
int main(void)
{
int t,n,i,j,k,m;
scanf("%d%d",&t,&n);
int a[n][n];
//先规定第一列的起始数;
a[0][0]=1;
for(i=1;i<n;i++)
{a[i][0]=a[i-1][0]+i;
printf("%d ",a[i][0]);
} printf("\n"); //接着根据每行的开头第一个数,以及相邻两个数之间的差,算出每行的每个数
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//j<n-i,实现了每一行比前一行少一个数;
{ //printf("a[%d][%d]是%d",i,j,a[i][j]);
a[i][j+1]=a[i][j]+(j+1)+(i+1);//原来是j+1再加1,但只符合第一行,第二行刚开始的两个数差的又比之前大了1;
printf("%d ",a[i][j]);
}
printf("\n");
}//*/
}
大佬试着运行一下,结果是这样的


离谱的地方就在这里:明明刚开始赋值第一列的时候,问题没有,但是到下面循环,对每一行各个元素赋值,时候,第1行(前面是第0行)就出现了问题,数值从2变成了21!
而且,我对a[1][0]重新赋值,这一行的结果还是不变,也就是a[1][0]的值根本不变,
而对其他除了a[1][0]的的第一行列数,a[0[0,a[2[0,a[3[0,a[4[0,结果都会正常改变,这是为什么??