Buy Me a Coffee

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,起始方向無限制。

通過這個題目的練習,學生可以加深對於