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开始
[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;