#include <iostream>
#include <algorithm>
using namespace std;
int seq[10010]={0},N,row,column;
bool cmp(int a,int b){
return a>b;
}
int index=0,matrix[150][150];
bool vis[150][150]={0};
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d",&seq[i]);
if(N==1){
printf("%d",seq[0]);
return 0;
}
for(row=1;row<120;row++)
if(row*row>=N&&N%row==0) break; //
column=N/row;
sort(seq,seq+N,cmp);
for(int i=0,j=0,flag=0,greater=0;index<N;flag++,greater++){
if(flag%2==0){//行方向填充
if((greater/2)%2==0){ //下标增大方向填充
for(;index<N&&j<column;j++){
if(vis[i][j]==false){
matrix[i][j]=seq[index++];
vis[i][j]=true;
}else break;
}
j--;//
i++;
}else{ //下标减小方向填充
for(;index<N&&j>=0;j--){
if(vis[i][j]==false){
matrix[i][j]=seq[index++];
vis[i][j]=true;
}else break;
}
j++;//
i--;
}
}else{//列方向填充
if((greater/2)%2==0){ //下标增大方向填充
for(;index<N&&i<row;i++){
if(vis[i][j]==false){
matrix[i][j]=seq[index++];
vis[i][j]=true;
}else break;
}
i--;//
j--;
}else{ //下标减小方向填充
for(;index<N&&i>=0;i--){
if(vis[i][j]==false){
matrix[i][j]=seq[index++];
vis[i][j]=true;
}else break;
}
i++;//
j++;
}
}
}
for(int i=0;i<row;i++){
for(int j=0;j<column;j++){
j!=column-1?printf("%d ",matrix[i][j]):printf("%d\n",matrix[i][j]);
}
}
return 0;
}
PAT A1105
最新推荐文章于 2021-01-30 00:38:57 发布