很郁闷,帮忙解释一下
[程序说明]
本程序将自然数 1,2,……,N2 按蛇形方式逐个顺序存入 N 阶矩阵。
例如,当 N = 3 和 4 时分别如图 3.1 和图 3.2。
7 13 14 16
6 7 9 6 8 12 15
2 5 8 2 5 9 11
1 3 4 1 3 4 10
图3.1 图3.2
从 an0 开始到 a0n 为止(n = N-1)顺序填入自然数,交替地对每一斜列从左上元素向右下元素或从右下元素向左上元素存数。
[程序]
#include
#define SIZE 10
int a[SIZE] [SIZE], k;
main()
{ int i, j, n, N;
for (N = 3;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");
}
}
}
makeline (int row_start, int col_start, int row_end)
{ /*完成矩阵一条斜线的整数填写*/
int i, j, sign = ____(1)____;
for (i = row_start, j = col_start;____(2)____ >=0; i += sign,j += sign)
a[i][j] = k++;
}
makeArray (int n)
{ /* 完成矩阵每条斜线的整数填写*/
int d;
for (d = 1; d <= ___(3)___; d++)
if (d <= n);
if (d%2) makeline (____(4)____); else makeline(____(5)____);
else
if (d%2) makeline (____(6)____); else makeline(____(7)____);
}
答案:
(1)row_start<row_end?:-1
或((row_end-row_start)>0)*2-1 和其它等价形式
(2)(row_end-i)*sign(3分)
(3)2*n+1(3分)
(4)n,d-1,n+1-d(3分)
(5)n+1-d,0,n(3分)
(6)2*n-d+1,n,0(3分)
(7)0, d-n-1, 2*n-d+1(3分)