自己写了个,感觉很罗嗦,而且用的是二维的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 print
for(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;
}