#include<cstdio>
#include<cmath>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int N,m,n,nums[10000];
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",nums+i);
}
sort(nums,nums+N,greater<int>());
//for(int i=0;i<N;i++) printf("%d ",nums[i]);
for(int i=sqrt(N);i>0;i--){
if(N%i==0){
n=i;
m=N/n;
break;
}
}
//printf("%d %d",m,n);
int **matrix=new int*[m];
for(int i=0;i<m;i++){
matrix[i]=new int[n];
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
matrix[i][j]=0;
}
}
int i=0,dir=0,x=0,y=0;
while(i<N){
if(!matrix[x][y]) matrix[x][y]=nums[i++];
switch(dir){
case 0:
if(y+1<n && !matrix[x][y+1]) y++;
else dir=1;
break;
case 1:
if(x+1<m && !matrix[x+1][y]) x++;
else dir=2;
break;
case 2:
if(y-1>=0 && !matrix[x][y-1]) y--;
else dir=3;
break;
case 3:
if(x-1>=0 && !matrix[x-1][y]) x--;
else dir=0;
break;
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d",matrix[i][j]);
if(j==n-1) putchar('\n');
else putchar(' ');
}
}
for(int i=0;i<m;i++){
delete[]matrix[i];
}
delete[]matrix;
return 0;
}
PAT(Basic Level)_1050_螺旋矩阵
最新推荐文章于 2021-03-22 20:04:38 发布