回 帖 发 新 帖 刷新版面

主题:有趣的题目

将数字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个回复)

沙发

没怎么有趣啊。。。。。。
你每次做四个操作就行了阿

板凳

可以直接的看出,蛇行数列在位于奇数的斜列上是向右上方递减的,位于偶数的斜列上是向右上放递增的。限定好条件,不让数列越界,可以从左边开始向右上方搜索。用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 楼

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.

加分啦~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册