一个算法的问题(随便看看)

来源:百度知道 编辑:UC知道 时间:2024/06/04 05:20:42
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
请问这是什么结构?
输入任一整数 如5,出现上面的图形
这个算法怎么实现呢? (用任何语言都可以)

var n:integer;
a:array[1..100,1..100] of integer;
x,y,ax,ay,i,t:integer;
begin
fillchar(a,sizeof(a),0);
ax:=0;ay:=1;
x:=1;y:=1;
readln(n);
for i:=1 to n*n do begin
a[x,y]:=i;
if not(((x+ax) in [1..n])and((y+ay) in [1..n])and(a[x+ax,y+ay]=0)) then begin
t:=ax;ax:=ay;ay:=t;
ay:=-ay;
end;
x:=x+ax;
y:=y+ay;
end;
for x:=1 to n do begin
for y:=1 to n do
write(a[x,y],' ');
writeln;
end;
end.

这个数组的规律是:从1开始,向右,向下,向左,向上,到16时结束第一圈,然后从17开始第二圈,一直到结束。

这很明显是一个递归的算法嘛。