#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
int a[21][21];
int main()
{
int n, n_2, i, j, count = 1;
cin>>n;
n_2 = n*n;
for (i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j] = 0;//初始化二维数组 ,都将其设为0;
i = 1; j = 1;
while (count <= n_2)
{
while (i<=n && a[i][j]==0)
{
a[i][j] = count++;
i++;
}//直到执行完此循环后,才会执行下一个循环。
//此循环的目的就是,排序第一列。 (j不变,i++)
i--; j++; //经过i-- 运算之后i=n;经过j++运算之后,j=2;
while(j<=n && a[i][j]==0)
{
a[i][j] = count++;
j++;
}//此循环的目的是,排序最后一行 。(i不变,j++)
j--; i--;//经过j-- 运算之后j=n;经过i-- 运算之后, i=n-1;
while(i>=1 && a[i][j]==0)
{
a[i][j] = count++;
i--;
}//次循环的目的就是,排序最右边的一列。(j不变,i--)
i++; j--;//经过i++ 运算之后i=1;经过j-- 运算之后, j=n-1;
while(j>=1 && a[i][j]==0)
{
a[i][j] = count++;
j--;
}//此循环的目的就是,排序最上面的一行。(i不变,j--)
//到此为止,最外面的一圈就算是排好了,很明显,四个循环的功能分别是
//排序四个不同方向的数。 接下来就是填充实心了,道理相似。
j++; i++;//由于,不满足a[i][j]=0,所以提前结束循环,
//因此,经过j++运算之后,j=2;
}
for (i=1; i<=n; i++)
{
for (j=1; j<n; j++)
printf("%-4d",a[i][j]);
printf("%-4d/n",a[i][n]);
}
getch();
}