Контур можно описать с помощью индексов i1 (верхняя граница), i2 (нижняя граница), j1 (левая граница), j2 (правая граница). Определить средний элемент матрицы, а затем расширять контур по мере заполнения его числами.
int num=1;
int i1=n/2;//описание контура
int i2=i1, j1=i1, j2=i1;
A[i1][j1]=num++;//центр матрицы
while (num<=n*n)
{//расширение контура
i1--;
i2++;
j1--;
j2++;
int k;
/*Циклы обхода контура, начиная с левого верхнего угла по часовой стрелке*/
for(k=j1;k<=j2;k++) A[i1][k]=num++;
for(k=i1+1;k<=i2;k++) A[k][j2]=num++;
for(k=j2-1;k>=j1;k--) A[i2][k]=num++;
for(k=i2-1;k>i1;k--) A[k][j1]=num++;
}
Задача (№ 372).Дано натуральное число N. Разместить в квадратной таблице размером N последовательность натуральных чисел 1, 2, …, N2 таким образом, чтобы наименьшее число было в левом нижнем углу матрицы, наибольшее – в правом верхнем, а другие заполняли квадрат по диагоналях с левого верхнего угла к правому нижнему.
