风的季节 我是歌手:蛇型阵的小问题,pascal

来源:百度文库 编辑:神马品牌网 时间:2024/05/03 09:15:53
将数字1,2,3,.....,n*n个数填入蛇型方阵如当n=3时方阵如下:
1 3 4
2 5 8
6 7 9
当n=4时方阵如下:
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16

将它的运动规律与它的下标联系起来,就容易分析了。
只有4个运动方向,下,斜上,右,斜下这4种。
而当下标i+j为偶数时,主方向为斜下,再补上转弯角的可能有两种,分别将两种情况的条件规定一下了,一切就好办了;i+j为奇数时用同种分析。
附:
var i,j,n,tag:integer;
ans:array[1..10,1..10]of integer;
begin
read(n);
if n<1 then writeln('no answer') {判断输入合法性}
else
begin
tag:=1;
i:=1;
j:=1;
ans[i,j]:=tag;
while tag<n*n do {tag为当前要填的数}
begin
if (i+j) mod 2=0 then {偶数情况}
begin
if (j=1) then
begin
if i<n then inc(i) {转弯1}
else inc(j); {转弯2}
end
else
if (i=n) then inc(j) {转弯2}
else
begin {斜下}
inc(i);
dec(j);
end;
end
else
begin
if (i=1) then
begin
if j<n then inc(j)
else inc(i);
end
else
if (j=n) then inc(i)
else
begin
dec(i);
inc(j);
end;
end;
inc(tag);
ans[i,j]:=tag;
end;

for i:=1 to n do {输出结果}
begin
for j:=1 to n do
write(ans[i,j]:3);
writeln;
end;
end;
end.