И ещё один вариант, похож на предыдущий, немного оптимизирован принцип:
Это для тех, кто не любит ещё и явно указывать условия
))))
Код
uses crt;
var
x1,y1,x2,y2,x,y:byte;
a:array[1..100,1..100] of integer;
val,dx,dy:integer;
n:byte;
begin
clrscr;
write('Введите N:');
readln(n);
x1:=1;
y1:=1;
x2:=n;
y2:=n;
val:=1;
x:=1;
y:=1;
repeat
a[x,y]:=val;
dx:=byte((y=y1)and(x<>x2))-byte((y=y2)and(x<>x1));
dy:=byte((x=x2)and(y<>y2))-byte((x=x1)and(y<>y1));
inc(x1,byte((dx=0)and(y=y1)and(val<>n)));
dec(x2,byte((dx=0)and(y=y2)));
inc(y1,byte((dy=0)and(x=x2)));
dec(y2,byte((dy=0)and(x=x1)and(val<>1)));
inc(x,dx);
inc(y,dy);
inc(val);
until val>n*n;
for y:=1 to n do
begin
for x:=1 to n do write(a[x,y]:3);
writeln;
end;
end.
Добавлено (2.02.03 1:32):Цитата
Я эти задачки решал на олимпиадах, причём на решение и оформение каждой было всего по 10 минут...
Представляю себе
)) если бы я решал на олимпиаде, я бы конечно не думал о "изящности" решения
)))
Прога может и не была бы оптимальной и маленькой, но я постарался бы уложиться в 10 минут, и думаю смог бы.. единственная проблемма у меня всегда была с оформлением. Что у вас под этим словом подразумевалось ?
З.Ы. И что, выиграл ?
))))