
思考了两下 没想到点 怎么根据从里到外 好像得需要用到双重for 求给出讲解
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
int j = 0;
int num = 1;
int a[12][12] = { 0 };
int t = ceil(1.0 * n / 2);//转的圈数为行数除以2,如果行数是奇数还要+1,其实就是ceil。
for (int i = 0; i<t; i++)
{
for (int j = i; j < n - i; j++)
{
a[i][j] = num++;//向右
}
for (int j = i + 1; j < n - i;j++)
{
a[j][n - i - 1] = num++;//向下
}
for (j = n - i - 2; j >= i;j--)
{
a[n - i - 1][j] = num++;//向左
}
for (j = n - i - 2; j >= i + 1;j--)
{
a[j][i] = num++;//向上
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
return 0;
}