/*
方阵填数:
在一个N*N的方阵中,填入1,2,……N*N个数,并要求构成如下的格式:
例:
N=5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
N=6
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int a[100][100];
int x, y, dx, dy, m;
printf("N=");
scanf("%d", &n);
x = n-1;
y = 0;
dx = 0;
dy = 1;
y = y-dy;
m = 0;
do
{
++m;
while( x + dx < 0 || x + dx >= n || y + dy < 0 || y + dy >= n || a[y + dy][x + dx] != 0 )
{
if( dx==0 && dy == 1 )
{
dx = -1;
dy = 0;
}
else if( dx==-1 && dy == 0 )
{
dx = 0;
dy = -1;
}
else if( dx==0 && dy == -1 )
{
dx = 1;
dy = 0;
}
else if( dx==1 && dy == 0 )
{
dx = 0;
dy = 1;
}
}
x = x + dx;
y = y + dy;
a[y][x] = m;
}while(m < n*n);
for(y = 0 ; y < n ; ++ y )
{
for(x = 0 ; x < n ; ++ x )
{
printf("%3d",a[y][x]);
}
printf("\n");
}
system("pause");
return 0;
}