Delphi实现n阶魔方阵,各位大神帮找什么有关问题

Delphi实现n阶魔方阵,各位大神帮找什么问题
[b]procedure TForm1.Button1Click(Sender: TObject);
var
 a:array of array of integer;
 i,j,k,n:integer;
 s:string;
begin
  n:=strtoint(edit1.text);
  setlength(a,n,n);
  fillchar(a,n*n,0);
  j:=trunc((n/2)+1);
  a[1,j]:=1;
  for k:=2 to n*n do
   begin
    i:=1;
    j:=trunc((n/2)+1);
    i:=i-1;
    j:=j+1;
    if((i<1)and(j>n))then
     begin
      i:=i+2;
      j:=j-1;
     end
    else
     begin
      if i<1 then i:=n;
      if j>n then j:=1;
     end;
    for i:=1to n do
    begin
     for j:=1 to n do
      begin
       if a[i,j]=0then a[i,j]:=k
       else
        a[i+2,j-1]:=k;
      end;
    end;
   end;
  for i:=1to n do
   begin
    s:='';
    for j:=1to n do
      s:=s+inttostr(a[i,j]);
    memo1.Lines.Add(s);
   end;

end;

end.
------解决思路----------------------
不知道你说的是不是奇数魔方阵,注意Delphi动态数组下标从1开始

var
  a: array of array of integer;
  i, j, k, n,t: integer;
  s: string;
begin
  n := strtoint(edit1.text);
  setlength(a, n, n);
  //fillchar(a, n * n, 0);
  j := trunc((n / 2));
  a[0, j] := 1;
  i:=0;
  for k := 2 to n * n do
  begin
    t:=j;
    if (i-1)<0 then i:=(n-1) else i:=i-1;//确定行
    if (t+1)>(n-1) then t:=0 else t:=t+1;//确定列
    if a[i,t]<>0 then
    begin
      if (i-1)<0 then i:=(n-1) else i:=i-1;//确定列
    end
    else j:=t;
    a[i,j]:=k;
  end;
  for i := 0 to n-1 do
  begin
    s := '';
    for j := 0 to n-1 do
    begin
      s := s + inttostr(a[i, j]);
      if J<>(n-1) then s:=s+' ';
    end;
    memo1.Lines.Add(s);
  end;

end;