level 1
从输入文件中读入一个数字N(N<=20),在输出文件中输出一个NxN的蛇形矩阵。
输出要求:数字与数字之间用一个空格进行间隔。
样例输入(snake.in):
4
样例输出(snake.out):
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
2011年05月29日 07点05分
1
level 1
program pr_1;
const MX = 21; x : array[0..3] of integer = (0,1,0,-1); y : array[0..3] of integer = (1,0,-1,0);var i,j : integer; n : integer; flag : array[0..MX,0..MX] of boolean; ans : array[0..MX,0..MX] of integer; nowx,nowy,face,nextx,nexty : integer;procedure Init;begin for i := 0 to MX do for j := 0 to MX do flag[i,j] := false; nowx := 1; nowy := 1; face := 0;end;function Isin(x,y:integer) : boolean;begin Isin := (x >= 1) and (y >= 1) and (x <= n) and (y <= n) and (not flag[x,y]);end;begin Init; read(n);
flag[1,1] := true; ans[1,1] := 1; for i := 2 to n*n do begin nextx := nowx + x[face]; nexty := nowy + y[face];
while (not Isin(nextx,nexty)) do begin inc(face); face := face mod 4; nextx := nowx + x[face]; nexty := nowy + y[face]; end; nowx := nextx; nowy := nexty; ans[nowx,nowy] := i; flag[nowx,nowy] := true; end; for i := 1 to n do begin for j := 1 to n do write(ans[j,i],' '); writeln(''); end;end.
2011年06月03日 02点06分
3
level 7
var
i,j,k,n,t,l1,l2:integer;
aa:array [1..100,1..100] of integer;
bb:array[0..3,1..2] of integer;
begin
write('Num: ');
readln(n);
fillchar(aa,sizeof(aa),0);
bb[0,1]:=1; bb[0,2]:=0;
bb[1,1]:=0; bb[1,2]:=1;
bb[2,1]:=-1; bb[2,2]:=0;
bb[3,1]:=0; bb[3,2]:=-1;
j:=1; k:=1; t:=0;
aa[1,1]:=1;
for i:=2 to n*n do
begin
l1:=j+bb[t,1];
l2:=k+bb[t,2];
if (l1=0) or (l1=n+1) or (l2=0) or (l2=n+1) then t:=(t+1) mod 4
else if aa[l1,l2]<>0 then t:=(t+1) mod 4;
j:=j+bb[t,1];
k:=k+bb[t,2];
aa[j,k]:=i;
end;
{输出数组中的内容}
for i:=1 to n do
begin
for j:=1 to n do
write(aa[i,j],' ');
writeln;
end;
end.
2011年06月03日 04点06分
4
level 1
你那个应该是逆时针的螺旋矩阵把
var a,b,t,x:integer; s:array[0..1000,0..1000]of integer;begin readln(x); for a:=1 to x do begin s[0,a]:=1; s[x+1,a]:=1; s[a,0]:=1; s[a,x+1]:=1; end; t:=1;a:=1;b:=1; while t<=x*x do begin s[a,b]:=t; if (s[a,b-1]<>0)and(s[a-1,b]<>0)and(s[a+1,b]=0)then a:=a+1 else if (s[a+1,b]<>0)and(s[a,b-1]<>0)and(s[a,b+1]=0)then b:=b+1 else if (s[a,b+1]<>0)and(s[a+1,b]<>0)and(s[a-1,b]=0)then a:=a-1 else b:=b-1; t:=t+1end; for a:=1 to x do begin for b:=1 to x do write(s[a,b]:5); writeln; end;end.
2016年01月16日 06点01分
10