(神奇的幻方)幻方是一种很神奇的N*N矩阵:它由数字1,2,3,...,N*N构成,且每行、每列及两条对角线上的数字之和都相同。
当N为奇数时,我们可以通过以下方法构建一个幻方:
首先将1写在第一行的中间。之后,按如下方式从小到大依次填写每个数(K=1,2,3,N*N);
1.若(K-1)在第一行但不在最后一列则将填在最后一行,(k—1)所在列的右一列;
2.若(K-1)在最后一列但不在第一行,则将填在第一列,(K-1)所在行的上一行;
3.若(K-1)在第一行最后一列,则将填在(K-1)的正下方;
4.若(K-1)既不在第一行,也不在最后一列,如果(K-1)的右上方还未填数,则将K填在(K-1)的右上方,否则将填在的正下方。
现给定N(奇数),请按上述方法构t造N*N的幻方。
样例输入:N=3
样例输出:
8 1 6
3 5 7
4 9 2
var
n,x,y,k:longint;
a:array[1..39,1..39] of integer;
begin
readln(n);
y:= (n+1) div 2 ; x:=1;
a[x,y]:=1;
for k:=2 to n*n do
begin
if ( x=1 ) and (y<>n) then
begin
x:=n; inc(y);
end
else if (y=n) and (x<>1) then
begin
y:=1; dec(x);
end
else if (x=1) and (y=n) then inc(x)
else if a[x-1,y+1]=0 then
begin
dec(x) ; inc(y);
end
else inc(x) ;
a[x,y]:=k;
end;
for x:=1 to n do
begin
for y:=1 to n do write( a[x,y] ,' ');
writeln;
end;
end.