/*
输出上面的方阵
算法:
1.输入方阵的n值;
2.将数组的a值的所有元素清零;
3.设置起始位置,本例中设置右上位起始位置,给数组的起始位置赋值1;
4.从1开始按照向下,向左,向上,向右的顺时针方向依次赋值。知道方阵中的数字累加到n*n,循环结束;
5.遍历二维数组,打印输出二维数组的值。
*/
#include<stdio.h>
#define MAXN 100
int a[MAXN][MAXN];
int main(void)
{
int n,i,j,t=0;
scanf("%d",&n);
//将数组的所有元素清零
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
a[i][j]=0;
}
//设置起始位置
t=a[i=0][j=n-1]=1;
while(t<n*n)
{
while(i+1<n && a[i+1][j]==0)//向下赋值
a[++i][j]=++t;
while(j-1>=0 && a[i][j-1]==0)//向左赋值
a[i][--j]=++t;
while(i-1>=0 && a[i-1][j]==0)//向上赋值
a[--i][j]=++t;
while(j+1<n && a[i][j+1]==0)//向右赋值
a[i][++j]=++t;
}
//输出二维数组
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}