不是VIP会员,不能显示答案

题目解答

题目:
(神奇的幻方)幻方是一种很神奇的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.
考点:
分析:
解答:
评论:
老师: