主题:有趣的题目
sandqqlei
[专家分:0] 发布于 2006-07-13 11:37:00
将数字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
答对有奖!!
回复列表 (共3个回复)
沙发
贺天行宝 [专家分:2300] 发布于 2006-07-13 20:39:00
没怎么有趣啊。。。。。。
你每次做四个操作就行了阿
板凳
lecher [专家分:70] 发布于 2006-07-14 12:04:00
可以直接的看出,蛇行数列在位于奇数的斜列上是向右上方递减的,位于偶数的斜列上是向右上放递增的。限定好条件,不让数列越界,可以从左边开始向右上方搜索。用a[1..n,1..n]来装数列,对于数组元素a[i,j]来说,只要不越界就有:
if j mod 2 = 0
then a[i-1,j-1]:=a[i,j]+1
else a[i-1,j-1]:=a[i,j]-1;
3 楼
abcwuhang [专家分:1840] 发布于 2006-10-29 18:17:00
var a:array[1..20,1..20] of integer;
n,x,y,i,j,k,ii:integer;
begin
writeln('input n:');
readln(n);
fillchar(a,sizeof(a),0);
i:=0;x:=1;y:=1;k:=1;j:=1;
while i<>n*n do
begin
for ii:=1 to k do
begin
if ii>1 then
begin
x:=x+j;
y:=y-j;
end;
inc(i);
a[x,y]:=i;
end;
if j=-1 then inc(y) else inc(x);
j:=-j;
if y>n then begin y:=n;x:=x+1;end;
if x>n then begin x:=n;y:=y+1;end;
if x+y<=n+1 then inc(k) else dec(k);
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln;
end.
加分啦~~
我来回复