#include
#define SIZE 10
int a[SIZE][SIZE];
int k;
void MakeLine(int row_start, int col_start, int row_end) //参数为行号 列号 终点行号
{//完成矩阵一条斜线的整数填写
int i, j;
int sign = row_start < row_end ? 1 : -1;
for (i=row_start,j = col_start; (row_end-i)*sign>=0; i+=sign,j+=sign )
a[j] = k++;
}
//-----------------------------
void MakeArray (int n)
{ //完成矩阵每条斜线的整数填写
int d; //斜线的个数标志
for (d=1; d<=2*n+1 ; d++) //共有2*n+1条斜线
{
if (d <= n) //n为主对角线
if (0 != d%2)
MakeLine (n, d-1, n+1-d); //注意各个MakeLine对行数列数的处理
else
MakeLine(n+1-d, 0, n);
}
else //>n为矩阵右上边的
{
if (0 != d%2)
MakeLine (2*n-d+1, n, 0);
else
MakeLine (0, d-n-1,2*n-d+1);
}
}
}
//--------------------------------------
void main ()
{
int i, j, n, N;
//printf ("\nN = %d;\n", SIZE);
for (N=1; N<=SIZE; N++)
{
k = 1;
MakeArray (n = N-1);
printf ("\nN = %d;\n", n +1 );
for (i=0; i<=n; i++) //输出矩阵
{
for (j=0; j<=n; j++)
{
printf ("%4d", a[j]);
}
printf ("\n");
}