APCS 題目數字龍捲風
題目描述
在這個APCS練習題中,給定一個奇數大小的二維陣列,從中心點開始,以順時針方向遍歷陣列的每個元素。根據陣列的內容和起始方向,輸出遍歷順序的結果。
練習環境
沒有編譯環境的話,可以在以下網站進行練習:Programiz C++ Compiler
輸入輸出格式
- 輸入:第一行是一個奇數N,代表二維陣列的大小。第二行是一個0至3之間的整數,表示起始方向(0左、1上、2右、3下)。接下來N行是陣列內容,每行N個數字。
- 輸出:輸出一串數字,代表按照順時針方向走訪陣列時的元素順序。
解題思路
此題目的關鍵是如何按照順時針方向遍歷陣列。可以使用一個方向陣列來控制行走方向,並根據遍歷的步數來控制轉彎。
解題程式碼
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, direction;
cin >> N >> direction;
vector<vector<int>> matrix(N, vector<int>(N));
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
cin >> matrix[i][j];
// 方向控制:左、上、右、下
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
int x = N / 2, y = N / 2;
int step = 1, total = N * N, count = 0;
while (count < total) {
for (int i = 0; i < step && count < total; ++i) {
cout << matrix[x][y];
x += dx[direction];
y += dy[direction];
count++;
if (count < total) cout << " ";
}
direction = (direction + 1) % 4;
if (direction == 0 || direction == 2) step++;
}
cout << endl;
return 0;
}
評分說明
測試資料的執行時間限制為1秒。評分依據正確通過測試數據的數量而定。
- 子題組1(20分):3 ≤ N ≤ 5,起始方向向左。
- 子題組2(80分):3 ≤ N ≤ 49,起始方向無限制。
通過這個題目的練習,學生可以加深對於