AwfulKitten
Участник
Есть простая задача. Вывести числа в массиве по спирали, например:
01 02 03 04
12 13 14 05
11 16 15 06
10 09 08 07
Для такого варианта задача решена.
var
s:array[1..n,1..m] of integer;
i,j,k,p:integer;
begin
i:=0; k:=0; p:=1;
while i<n*m do
begin
k:=k+1;
for j:=k to m-k+1 do
begin
i:=i+1;
s[k,j]:=p;
p:=p+1;
end;
for j:=k+1 to n-k+1 do
begin
i:=i+1;
s[j,m-k+1]:=p;
p:=p+1;
end;
for j:=m-k downto k do
begin
i:=i+1;
s[n-k+1,j]:=p;
p:=p+1;
end;
for j:=n-k downto k+1 do
begin
i:=i+1;
s[j,k]:=p;
p:=p+1;
end
end;
for i:=1 to n do
begin
for j:=1 to m do
write(s[i,j]:4,' ');
writeln
end
end.
Но дальше - больше =)
Спираль может начинаться с любого внешнего элемента. Как это сделать?? Никто не подскажет??
01 02 03 04
12 13 14 05
11 16 15 06
10 09 08 07
Для такого варианта задача решена.
var
s:array[1..n,1..m] of integer;
i,j,k,p:integer;
begin
i:=0; k:=0; p:=1;
while i<n*m do
begin
k:=k+1;
for j:=k to m-k+1 do
begin
i:=i+1;
s[k,j]:=p;
p:=p+1;
end;
for j:=k+1 to n-k+1 do
begin
i:=i+1;
s[j,m-k+1]:=p;
p:=p+1;
end;
for j:=m-k downto k do
begin
i:=i+1;
s[n-k+1,j]:=p;
p:=p+1;
end;
for j:=n-k downto k+1 do
begin
i:=i+1;
s[j,k]:=p;
p:=p+1;
end
end;
for i:=1 to n do
begin
for j:=1 to m do
write(s[i,j]:4,' ');
writeln
end
end.
Но дальше - больше =)
Спираль может начинаться с любого внешнего элемента. Как это сделать?? Никто не подскажет??