e462 - Error
題目描述
題目要求輸出一個 n x n 的矩陣,矩陣中的數字按照螺旋順序填入,從 1 開始。
解題思路
這題的核心是模擬螺旋填數的過程。程式首先建立一個 n x n 的二維陣列 b。然後,根據行數的奇偶性,決定從左到右或從上到下填入數字。接著,處理剩餘的區域,同樣根據行數的奇偶性,決定從右到左或從下到上填入數字。最後,輸出整個矩陣。
複雜度分析
- 時間複雜度: O(n^2)
- 空間複雜度: O(n^2)
程式碼
#include <iostream>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int a;
while(cin >> a){
int b[a][a]={};
int k=1;
for(int i=0;i<a;i++){
if(i%2==1){
for(int j=0,y=i;j<=i;j++){
b[j][y]=k;
k++;
y--;
}
}
else{
for(int j=0,y=i;j<=i;j++){
b[y][j]=k;
k++;
y--;
}
}
}
if(a%2==0){
for(int i=0;i<a-1;i++){
if(i%2==1){
for(int j=a-1,y=i+1;j>=i+1;j--){
b[y][j]=k;
k++;
y++;
}
}
else{
for(int j=a-1,y=i+1;j>=i+1;j--){
b[j][y]=k;
k++;
y++;
}
}
}
}
else{
for(int i=0;i<a-1;i++){
if(i%2==0){
for(int j=a-1,y=i+1;j>=i+1;j--){
b[y][j]=k;
k++;
y++;
}
}
else{
for(int j=a-1,y=i+1;j>=i+1;j--){
b[j][y]=k;
k++;
y++;
}
}
}
}
for(int i=0;i<a;i++){
for(int j=0;j<a;j++){
cout << b[i][j] << " ";
}
cout << endl;
}
}
}