蛇形方式逐个顺序存入矩阵
#include <stdio.h>
#define SIZE 10
int a[SIZE][SIZE], k;
makeline (int row_start, int col_start, int row_end)
{ /*完成矩阵一条斜线的整数填写*/
int i, j, sign =row_start<row_end?1:-1; //____(1)____;
//row_start<row_end 时,sign =1 为斜上往向下时状态
//row_start>row_end 时,sign =-1 为下往斜上时状态
for (i = row_start, j = col_start;/*(2)*/(row_end-i)*sign>=0;i += sign,j += sign)
a[i][j] = k++;
}
makeArray (int n)
{ /* 完成矩阵每条斜线的整数填写*/
int d;
for (d = 1; d<=2*n+1/*(3)*/; d++) //makearrary中由矩阵的当前斜列d
if (d <= n)
if (d%2)
makeline (n,d-1,n+1-d);//(4)
else
makeline(n+1-d,0,n); //(5)
else
if (d%2) makeline (2*n-d+1,n,0); //(6)
else makeline(0, d-n-1, 2*n-d+1); //(7)
}
main()
{
int i, j, n, N;
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[i][j]);
printf ("\n");
}
}
}