題目連結: https://zerojudge.tw/ShowProblem?problemid=c292

# 內容

給定一個二維陣列,依照題目需要從中間逆時針或順時針向外 輸出答案

# 思路

就是很純的模擬
先從中間開始,把中間的那圈走完,再往外拓張,直到走完全圖

# 程式碼

#include <iostream>
using namespace std;
 
int main(){
    int N, nxt;
    while (cin >> N) {
        cin >> nxt;
        int a[N][N];
        for (int i=0; i<N; i++)
            for (int j=0; j<N; j++)
                cin >> a[i][j];
        // 0 代表左 、1 代表上 、2 代表右 、3 代表下
        int direction[4][2] = <!--swig0-->;
        int total_steps = N * N, steps = 1;
        int repeat = 1, repeat_cnt = 0;
        int r = N / 2, c = N / 2; // 從中心點出發
 
        cout << a[r][c];
        while (steps < total_steps){
            for (int i=0; i<repeat; i++){
                r += direction[nxt][0];
                c += direction[nxt][1];
                cout << a[r][c];
                steps++;
                if (steps == total_steps) break;
            }
            repeat_cnt++;
            if (repeat_cnt % 2 == 0)
                repeat++;
            nxt = (nxt + 1) % 4;
        }
        cout << endl;
    }
    return 0;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay