#include<iostream>#include<bits/stdc++.h>usingnamespace std;boolcmp(int a,int b){return a>b;}int n;intmain(){
cin >> n;
vector<int> a;int tmp;for(int i =0;i < n;i++){
cin >> tmp;
a.emplace_back(tmp);}sort(a.begin(),a.end(),cmp);//find m and nint m =sqrt(n);for(;m >=1;m--)if(n % m ==0)break;int N = n / m;if(N > m)swap(N,m);int level = m /2+ m %2;int t =0;
vector<vector<int>>b(m,vector<int>(n));for(int i =0;i < level;i++){for(int j = i;j <= N - i -1&& t <= n-1;j++)
b[i][j]= a[t++];//(0,0),(0,1),(0,2),(1,1)for(int j = i +1;j <= m - i -1&& t <= n-1;j++)
b[j][N - i -1]= a[t++];//(1,2),(2,2),(3,2),(2,1)for(int j = N - i -2;j >= i && t <= n-1;j--)
b[m-i-1][j]= a[t++];//(3,1),(3,0)for(int j = m - i -2;j >= i +1&& t <= n-1;j--)
b[j][i]= a[t++];//(2,0),(1,0)}for(int i =0;i < m;i++){for(int j =0;j < N;j++){if(j ==0)
cout << b[i][j];else
cout <<" "<< b[i][j];}
cout << endl;}return0;}
精华
vector创建二维数组
vector<vector<int>>b(m,vector<int>(n));//创建m*n的矩阵
螺旋矩阵层次的计算
int level = m /2+ m %2;//m为奇数,则层数为m/2+1;m为偶数,则层数为m/2