/*
输入2:
1 2
4 3
输入3:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输入5:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输入6:
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
*/
#include "xunhuan.h"
void xunhuan()
{
int n,i,j,k=0;
printf("输入n:");
scanf("%d",&n);
int mat[n][n];
for (i=0;i<(n+1)/2;i++)//确定在奇数情况下循环能处理最后那个值
{
for (j=i;j<=n-i-1;j++)//123mat[不变][加一]
mat[i][j] = ++k;//为什么要用++k 因为k=0 如果不先加那么 0就会赋给数组 n-i-1确定第一边界
for (j=i+1;j<=n-i-1;j++)//45 确定mat[不变][最后一个值] j+1是因为mat[0][4]已经有值了
mat[j][n-i-1] = ++k;
for (j=n-i-2;j>=i;j--)//为什么用递减 因为数组是从0开始到最边界3因为4已经有值了,又因为数值是从小到大 为什么用n-i-2因为mat[4][4]有值了
mat[n-i-1][j] = ++k;//确定76 mat[不变][递减]
for (j=n-i-2;j>=i+1;j--)//8 循环1次 位置i+1是跳过最下面的元素 n-i-2不对上层元素做处理
mat[j][i] = ++k;//为什么用n-i-2因为mat[4][0]有值了,i+1等到还剩多少个值
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%d\t",mat[i][j]);
printf("\n");
}
}