Попробуй таким кодом.. Кое-где можно оптимизировать, если нужно...
Code
Program Snake;
Uses CRT;
Const m = 4;
Var Count: Integer;
i: Byte;
ii: Byte;
a: Array[1..m, 1..m] of Integer;
Procedure Print;
Var j, jj: Byte;
Begin
ClrScr;
For j := 1 to m do
Begin
For jj := 1 to m do
Write(a[j,jj]:3);
Writeln;
End;
ReadKey;
End;
Begin
ClrScr;
Count := 1;
i := 1;
a[1,1] := 1;
Print;
While (Count <> m * m) do
Begin
Inc(i);
If (i <= m) then
If (Odd(i)) then For ii := i downto 1 do
Begin
Inc(Count);
a[ii,i-ii+1] := Count;
Print;
End
else For ii := i downto 1 do
Begin
Inc(Count);
a[i-ii+1,ii] := Count;
Print;
End
else
If (not Odd(i)) then For ii := i-m+1 to m do
Begin
Inc(Count);
a[ii,m-ii+(i-m+1)] := Count;
Print;
End
else For ii := i-m+1 to m do
Begin
Inc(Count);
a[m-ii+(i-m+1),ii] := Count;
Print;
End;
End;
End.
Проверка:
Для 4-х:
Для 7-ми:
Если что-то не будет работать - пиши.... пересмотрю