#include<stdio.h>
#define N 20
main()
{
int a[N][N]={0};
int t,j,k,l,m,n,i;
printf("请输入矩阵的大小:\n");
scanf("%d",&t);l=t;
for(j=0;j<t;j++) // 输出t行
{
m=j+1;n=j; //定义两个变量m和n。
for(k=0;k<l;k++) //每行输出l个数,结合后面的l--,每行比上一行少一个数
{
if(k>0) //从第二列开始每个数是这一行前一列数字加上m。
a[j][k]=a[j][k-1]+m; // 因为你这程序所描述的矩阵实际上是从左到右按45°向上依次递增。所以第一层循环中的m=j+1,实现了
else if(j>0) a[j][k]=a[j-1][k]+n; //a[j][k-1]向右上方数到第一行,就是a[j][k-1]所在的行数,结合下面的m++,m就是a[j][k]所在的(前面的
else a[j][k]=1; //列数(k)+所在的行数(j+1))。
m++; //else if(j>0) a[j][k]=a[j-1][k]+n; 这句话从第二行开始每一行的第一个数都是上一行的第一个数+他所在行
printf("%4d",a[j][k]); //数-1就是+j
} //else a[j][k]=1;表示第一行第一列a[0][0]=1
l--; //l--,实现每一行比上一行少输出一个数
printf("\n"); //每输出一行换行
}
}