回 帖 发 新 帖 刷新版面

主题:[讨论]悬赏50 分!!!!!回型排列!

三、回形排列
源程序名    ROTATE.??? (PAS,BAS,C,CPP)
可执行文件名   ROTATE.EXE
输入文件名   ROTATE.IN
输出文件名     ROTATE.OUT
时间限制       1S

给出一个N(1≤N≤20),得到一个N*N的方阵,如下图所示为N=4的情况。
   1   2   3   4
  12  13  14   5
  11  16  15   6
  10   9   8   7

输入
输入文件的仅有一行包含一个整数N(1≤N≤20)。

输出
输出文件共有N行包含一个N*N的方阵,方阵中每个数均用四个字符的长度输出(即靠右对齐),如不满四个字符则在前面输出空格补足四个字符的长度。

样例
ROTATE.IN
4

ROTATE.OUT
   1   2   3   4
  12  13  14   5
  11  16  15   6
  10   9   8   7

回复列表 (共1个回复)

沙发

program rotate;
var s:array[0..21,0..21] of integer;
    n,x,y,i,j,fx,num:integer;

begin
 assign(input,'rotate.in'); reset(input);
 assign(output,'rotate.out'); rewrite(output);
 readln(n);

 fillchar(s,sizeof(s),0);
 for i:=0 to n+1 do
  begin
   s[0,i]:=1;
   s[n+1,i]:=1;
   s[i,0]:=1;
   s[i,n+1]:=1;
  end;
 fx:=1; x:=0; y:=1; i:=1; j:=0; num:=1;
 while num<=n*n do
  begin
   if s[x+i,y+j]=0 then begin x:=x+i; y:=y+j; s[x,y]:=num; inc(num); end
   else
    begin
     inc(fx);
     if fx=5 then fx:=1;
     case fx of
      1:begin i:=1; j:=0; end;
      2:begin i:=0; j:=1; end;
      3:begin i:=-1; j:=0; end;
      4:begin i:=0; j:=-1; end;
     end;
    end;
  end;

 for i:=1 to n do
  begin
   for j:=1 to n do write(s[j,i]:4);
   writeln;
  end;

 close(input); close(output);
end.

我来回复

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