切换到宽版
  • 5470阅读
  • 5回复

绕圈数一 [复制链接]

上一主题 下一主题
离线雨化石
 
只看楼主 正序阅读 0 发表于: 2006-12-06
输入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
离线justsoso
只看该作者 5 发表于: 2007-04-15
看看我写的
  1. PROGRAM circlenum(Input,Output);
  2. Var n:1..100;
  3.   num:array[1..100,1..100] of integer;
  4. Procedure Print;
  5. var i,j:integer;
  6. begin
  7.   for i:=1 to N do
  8.     begin
  9.     for j:=1 to N do
  10.       write(num[i,j]:5);
  11.     writeln;
  12.     end;
  13. end;
  14. Procedure doing;
  15. var
  16.   row,col,f,c:integer;   // 'f' is instead of bearing
  17. begin               // 'c' is instead of number
  18.   c:=2;
  19.   f:=1;
  20.   row:=1;
  21.   col:=1;
  22.   num[1][1]:=1;
  23.   while c<=n*n do
  24.     Case f of
  25.     1: begin                           // go right
  26.         while (col+1<=N)and(num[row][col+1]=0) do
  27.           begin
  28.           num[row][col+1]:=c;
  29.           c:=c+1;
  30.           col:=col+1;
  31.           end;
  32.           f:=2;
  33.       end;
  34.     2: begin                           // go down
  35.         while (row+1<=N)and(num[row+1][col]=0) do
  36.           begin
  37.           num[row+1][col]:=c;
  38.           c:=c+1;
  39.           row:=row+1;
  40.           end;
  41.           f:=3;
  42.       end;
  43.     3: begin                           // go left
  44.         while (col-1>=1)and(num[row][col-1]=0) do
  45.           begin
  46.           num[row][col-1]:=c;
  47.           c:=c+1;
  48.           col:=col-1;
  49.           end;
  50.           f:=4;
  51.         end;
  52.     4: begin                           // go up
  53.         while (row-1>=1)and(num[row-1][col]=0) do
  54.           begin
  55.           num[row-1][col]:=c;
  56.           c:=c+1;
  57.           row:=row-1;
  58.           end;
  59.           f:=1;
  60.       end;
  61.     end;
  62. end;
  63. BEGIN
  64. readln(n);
  65. fillchar(num,sizeof(num),0);   // '0' is instead of NIL position
  66. doing;
  67. Print;
  68. END.

离线地震
只看该作者 4 发表于: 2007-04-09
麻烦了点
离线地震
只看该作者 3 发表于: 2007-04-09
tian cai
离线地震
只看该作者 2 发表于: 2007-04-09
var k,n,left,right,up,down,i,j:integer;
a:array[1..100,1..100] of integer;
begin
readln(n);
k:=0;i:=1;j:=1;
left:=1;right:=n;up:=1;down:=n;
while k<n*n do
begin
for i:=left to right do
begin
inc(k);
a[j,i]:=k;
end;
up:=up+1;
for j:=up to down do
begin
inc(k);
a[j,i]:=k;
end;
right:=right-1;
for i:=right downto left do
begin
inc(k);
a[j,i]:=k;
end;
down:=down-1;
for j:=down downto up do
begin
k:=k+1;
a[j,i]:=k;
end;
left:=left+1;
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end.
离线zhengyuan95
只看该作者 1 发表于: 2006-12-06
var k,n,left,right,up,down,i,j:integer;
  a:array[1..100,1..100] of integer;
begin
readln(n);
k:=0;i:=1;j:=1;
left:=1;right:=n;up:=1;down:=n;
while k<n*n do
begin
for i:=left to right do
begin
inc(k);
a[j,i]:=k;
end;
up:=up+1;
for j:=up to down do
begin
inc(k);
a[j,i]:=k;
end;
right:=right-1;
for i:=right downto left do
begin
inc(k);
a[j,i]:=k;
end;
down:=down-1;
for j:=down downto up do
begin
k:=k+1;
a[j,i]:=k;
end;
left:=left+1;
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end.
快速回复
限100 字节
 
上一个 下一个