记录下螺旋逻辑
#include<bits/stdc++.h>
using namespace std;
int n;
int a=0,b=0;
vector<int> v;
bool cmp(int a,int b){
return a>b;
}
void ma(int m){
for(int i=m;i>=1;i--){
if(m%i==0){
if(i>=m/i){
a=i;
b=m/i;
}
else
return;
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
v.push_back(x);
}
sort(v.begin(),v.end(),cmp);
ma(n);
int dp[a][b];
memset(dp,0,sizeof(dp));
int level=a/2+a%2;
int t=0;
for(int i=0;i<level;i++){
for(int j=i;j<b-i&&t<n;j++)
dp[i][j]=v[t++];
for(int j=i+1;j<a-i-1 && t<n;j++)
dp[j][b-i-1]=v[t++];
for(int j=b-i-1;j>=i&& t<n;j--)
dp[a-i-1][j]=v[t++];
for(int j=a-i-2;j>=i+1 && t<n;j--)\
dp[j][i]=v[t++];
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(j!=0) printf(" ");
printf("%d",dp[i][j]);
}
printf("\n");
}
return 0;
}