自己写了个,感觉很罗嗦,而且用的是二维的vector,代码比较膨胀。在网上看到一个很精典的代码,粘贴过来,学习一下。
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
void print(int n)
{int* Array = new int[n*n];int start = 0;int end = n*n-1;int i = 0, j = 0;int d = -1; //d = -1 表示向右上移; d = 1 表示向左下while(start <= end){Array[i * n + j] = start++; //二维数组在内存中的排放Array[(n - i - 1) * n + (n - j - 1) ] = end--; //同时修改左上角和右下角元素i += d;j -= d;if(i < 0){i++;d = -d; //change move side}else if(j < 0){j++;d = -d;}}//only for printfor(i = 0; i < n*n; i++){cout<<setw(4)<<Array[i];if(i % n == (n-1)) cout<<endl<<endl;}delete[] Array;
}int main()
{int number;cin>>number;print(number);return 0;}