回 帖 发 新 帖 刷新版面

主题:求一个回转填数的pascal程序

可以找到c语言的可我又看不懂,
请高手指教。


输出如下形式的数组:如 n=5 时

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

程序若能有解释和算法分析更好了
谢谢各位

回复列表 (共2个回复)

沙发

l:方向 a:横坐标 b:竖坐标 死做,哈哈
const d:array[1..4,1..2]of longint=((-1,0),(0,1),(1,0),(0,-1));
var
  s:array[0..101,0..101]of longint;
  i,j,k,l,m,n,a,b:longint;
begin
  readln(n);
  for i:=0 to n+1 do
    for j:=0 to n+1 do
      s[i,j]:=100;
  for i:=1 to n do
    for j:=1 to n do
      s[i,j]:=0;
  a:=1;b:=0;l:=2;k:=1;
  while k<>n*n+1 do
    begin
      if s[a+d[l,1],b+d[l,2]]=0 then begin
                                       a:=a+d[l,1];
                                       b:=b+d[l,2];
                                       s[a,b]:=k;
                                       inc(k);
                                     end
                                else begin
                                       inc(l);
                                       if l=5 then l:=1;
                                     end;
    end;
  for i:=1 to n do
   begin
     for j:=1 to n do
       write(s[i,j]:5);
     writeln;
   end;
end.

加分哦

板凳

用搜索呀

我来回复

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