输入一个n
输出n行n列
eg:4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int num[100][100]; int main() { int n; while(~scanf("%d",&n)) { int node=1; memset(num,0,sizeof(num)); num[1][1]=1; int x=1; int y=1; while(node<n*n) { while(y+1<=n&&!num[x][y+1]) { y++; num[x][y]=++node; } while(x+1<=n&&!num[x+1][y]) { x++; num[x][y]=++node; } while(y-1>=1&&!num[x][y-1]) { y--; num[x][y]=++node; } while(x-1>=1&&!num[x-1][y]) { x--; num[x][y]=++node; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(j==n) printf("%d ",num[i][j]); //实现右对齐可以加%-3d这样,我用的 else printf("%d ",num[i][j]); } printf(" "); } } return 0; }