//分层,依次根据层号用四个外层的循环填入矩阵——————利用实例判断矩阵下标转换。
//模拟:回路矩阵
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#define MAXN 10005
using namespace std;
int mp[MAXN][MAXN];
int num[MAXN];
bool cmp(int n, int n2){
return n > n2;
}
int main(){
int n, m, N;
cin >> N;
for(int i = 0; i < N; i++)
cin >> num[i];
sort(num, num+N, cmp);
for(int i = sqrt(N); i >= 1; i--){
if(!(N%i)){
m = N/i;
n = i;
break;
}
}
//cout << "m n " << m << " " << n << endl;
int cnt = 0;
int level = m/2+m%2;
for(int i = 0; i <= level; i++){
for(int j = i; j <= n-i-1 && cnt < N; j++){
mp[i][j] = num[cnt++];
}
for(int j = i+1; j <= m-i-2 && cnt < N; j++){
mp[j][n-i-1] = num[cnt++];
}
for(int j = n-i-1; j >= i && cnt < N; j--){
mp[m-i-1][j] = num[cnt++];
}
for(int j = m-i-2; j >= i+1 && cnt < N; j--){
mp[j][i] = num[cnt++];
}
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << mp[i][j];
if(j!= n-1) cout << " ";
}
cout << endl;
}
return 0;
}
模拟-回路矩阵-1105
最新推荐文章于 2024-05-24 15:44:29 发布