#include <stdio.h> int main() { int n=0,count=2,row=0,col=0,time=0; int arr[1000][1000]={0}; scanf("%d",&n); arr[0][0]=1; while(count<=n*n) { if(col<n-1)//在行小于n之前列加一(1->2,6->7) { col++; time++;//在小于n之前,斜线走的次数递增。 } //大于n后向下走,行加一 (13->14) else { row++; time--;//在大于n后,斜线的次数递减。 } arr[row][col]=count++; for(int i=0;i<time;i++)//斜下走 { row++; col--; arr[row][col]=count++; } if(row<n-1)//原理同上。 { time++; row++; } else { time--; col++; } arr[row][col]=count++; for(int i=0;i<time;i++)//斜上走 { row--; col++; arr[row][col]=count++; } } for(int i=0;i<n;i++)//打印 { for(int j=0;j<n;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }