PAT–1105 Spiral Matrix
- 题目描述
- 代码
//
// Created by 马然 on 2022/5/1.
//
#include<iostream>
#include<math.h>
#include<algorithm>
#include<vector>
using namespace std;
int a[110][110] = {0};
bool cmp(int a, int b)
{
return a >= b;
}
int main(){
int N;
vector<int> vec;
cin>>N;
for(int i = 0 ; i < N ; i++){
int t;
cin>>t;
vec.push_back(t);
}
//排序
sort(vec.begin(), vec.end(),cmp);
//寻找合适的m,n
int n = sqrt(N);
int m ;
for(n ; n > 0 ; n--){
if(N % n == 0){
m = N / n;
break;
}
}
//右左上下边界
int rl = n - 1 , ll = 0 , ul = 1 , dl = m - 1;
int col = 0 , row = 0;//当前坐标
int r = 1 , d = 0 , l = 0 , u = 0;//方向
int index = 0;//容器索引
while(index < vec.size()){
int temp = vec[index];
if(r == 1){//向右
if(col <= rl ){//小于右边届一直向右
a[row][col] = temp;
index++;
col++;
}
else{//大于右边界
r = 0;
d = 1;//向下
row++;//向下一行
col--;//col减回来
rl--;//右边界减1
}
}
else if(d == 1){
if(row <= dl){
a[row][col] = temp;
index++;
row++;
}
else{
d = 0;
l = 1;
col--;
row--;
dl--;
}
}
else if(l == 1){
if(col >= ll){
a[row][col] = temp;
index++;
col--;
}
else{
l = 0 ;
u = 1;
row--;
col++;
ll++;
}
}
else if(u == 1){
if(row >= ul){
a[row][col] = temp;
index++;
row--;
}
else{
u = 0;
r = 1;
row++;
col++;
ul++;
}
}
}
for(int i = 0 ; i < m ; i++){
cout<<a[i][0];
for(int j = 1 ; j < n ; j++){
cout<<" "<<a[i][j];
}
cout<<endl;
}
}