#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> #include<functional> using namespace std; //外层for遍历每一包裹的层,内4个for分别为右下左上 int cmp(int a,int b){return a>b;} int main(){ int N,m,n,t=0; scanf("%d",&N); for(n=sqrt((double)N);n>=1;n--){ if(N%n==0){ m=N/n;//m行n列 break; } } vector<int>a(N);//共N个数 for(int i=0;i<N;i++) scanf("%d",&a[i]); sort(a.begin(),a.end(),cmp); vector<vector<int>>b(m,vector<int>(n)); int level=m/2+m%2; for(int i=0;i<level;i++){ for(int j=i;j<=n-1-i&&t<=N-1;j++) b[i][j]=a[t++]; for(int j=i+1;j<=m-2-i&&t<=N-1;j++) b[j][n-1-i]=a[t++]; for(int j=n-i-1;j>=i&&t<=N-1;j--) b[m-1-i][j]=a[t++]; for(int j=m-2-i;j>=i+1&&t<=N-1;j--) b[j][i]=a[t++]; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ printf("%d",b[i][j]); if(j!= n-1) printf(" "); } printf("\n"); } system("pause"); return 0; }