发表在 深坑帝国 10-18 21:36:45
方阵填数1 的答案:
Var
j:Integer;
n,i,k,x,y,Number:Byte;
Result:Array[1..25,1..25] of Byte;
Begin
Write('N='); Readln(n);
For x:=1 to n do for y:=1 to n do Result[x,y]:=0; {初始化数组}
X:=0; Y:=N; i:=0; k:=N; j:=1;
{j表示填数方向。从左→右或从上→下,j=1;否则j=-1}
While i<N*N do
Begin
For i:=i+1 to i+k do {纵向填 k 个数}
Begin
X:=X+j;
Result[x,y]:=i;
End;
Dec(k); {K:填多少个数,其规律是递减:n,n-1,n-2,......,2,1}
If j=1 then j:=-1 else j:=1; {改变方向}
For i:=i+1 to i+k do {横向填 k 个数}
Begin
y:=y+j;
Result[x,y]:=i;
End;
End;
For x:=1 to n do {输出}
Begin
For y:=1 to n do Write(Result[x,y]:3);
Writeln;
End;
End.
方阵填数2
【题目】方阵填数:在一个N×N的方阵中,填入1,2,.....N×N个数,并要求构成如下的格式:
N=4 N=5
1 3 4 10 1 3 4 10 11
2 5 9 11 2 5 9 12 19
6 8 12 15 6 8 13 18 20
7 13 14 16 7 14 17 21 24
15 16 22 23 25
【算法分析】
例如N=4,观察图案,是以右上→左下,或左下→右上 这样的斜向来填数的。
1 2 3 4 这个方向可用 j 取1与-1 来控制。
/ / / / 3 一共有7个斜行,每一斜行数的个数的规律 1,2,3,4,3,2,1
/ / / / 2 例如第三斜行,其坐标变化规律:a[1,3]->a[2,2]->a[3,1]
/ / / / 1 第四斜行,a[4,1]->a[3,2]->a[2,3]->a[1,4]
/ / / / 坐标变化规律均是:在上一坐标基础上加1或减1