PAT甲級(jí)——1105 Spiral Matrix——分?jǐn)?shù) 25
題目

螺旋填充數(shù)組
解法1
點(diǎn)擊查看代碼
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int N; cin >> N;
vector<int> vi(N);
for(int i = 0; i < N; i++) cin >> vi[i];
// 排序要降序排列
sort(vi.begin(), vi.end(), greater<int>());
// 找m和n,使得m*n=N,且m>=n且m最小
int m = N, n = 1;
for(int i = 1; i*i <= N; i++){
if(N % i == 0){
m = N / i;
}
}
n = N / m;
vector<vector<int>> ans(m, vector<int>(n, 0));
int top = 0, bottom = m-1, left = 0, right = n-1;
int idx = 0;
while(idx < N){
for(int i = left; i <= right && idx < N; i++) ans[top][i] = vi[idx++];
top++;
for(int i = top; i <= bottom && idx < N; i++) ans[i][right] = vi[idx++];
right--;
for(int i = right; i >= left && idx < N; i--) ans[bottom][i] = vi[idx++];
bottom--;
for(int i = bottom; i >= top && idx < N; i--) ans[i][left] = vi[idx++];
left++;
}
// 輸出
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
printf((j>0)?" %d":"%d",ans[i][j]);
// if(j > 0) cout << " ";
// cout << ans[i][j];
}
cout << endl;
}
return 0;
}
posted on 2025-04-27 10:55 LEESOL-cn 閱讀(6) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)