#include"stdafx.h"#include<string.h>#define maxn 20int a[maxn][maxn];
using namespace std;intmain(){int n, x, y, tot =0;scanf("%d",&n);memset(a,0,sizeof(a));//数组初始化为0
tot = a[x =0][y = n -1]=1;//右上定为1while(tot < n*n){//两个条件 不超出边界 未填(数字为0)先判断 再移动 x+1,y-1,x-1,y+1分别为下一个元素位置要变化的坐标值while(x +1< n &&!a[x +1][y]) a[++x][y]=++tot;//先向下移动while(y-1>=0&&!a[x][y -1])a[x][--y]=++tot;//再向左移动while(x-1>=0&&!a[x -1][y])a[--x][y]=++tot;//再向上移动while(y+1< n &&!a[x][y +1])a[x][++y]=++tot;//再向右移动}for(x =0; x < n; x++){for(y =0; y < n; y++)printf("%3d", a[x][y]);printf("\n");}return0;}