#12306: C++ 解法


Sean64 (Sean @ https://sean.cat/)

學校 : 國立交通大學
編號 : 59159
來源 : [140.113.231.99]
最後登入時間 :
2022-07-04 01:47:49
a417. 螺旋矩陣 | From: [114.34.119.217] | 發表日期 : 2017-06-30 17:18

40 行解決,不知道有沒有更乾淨的方法


#include <stdlib.h>
#include <iostream>

using namespace std;

int main() {
    int T, M, N;
    int R[100][100];   // 結果
    cin >> T;   // 測資數量
    for (int i=0; i<T; i++) {
        int n = 1;   // 計數器 (繞多少)
        cin >> N >> M;   // 大小, 方向
        for (int j=0; j<(N+1)/2; j++) {   // 第幾層
            for (int k=0; k<N-2*j-1; k++)   // 上面
                R[j][j+k] = n++;
            for (int k=0; k<N-2*j-1; k++)   // 右邊
                R[j+k][N-j-1] = n++;
            for (int k=0; k<N-2*j-1; k++)   // 下面
                R[N-j-1][N-k-j-1] = n++;
            for (int k=0; k<N-2*j-1; k++)   // 左邊
                R[N-j-k-1][j] = n++;
        }
        if (N%2)   // 奇數大小
            R[N/2][N/2] = n;   // 正中間

        for (int j=0; j<N; j++) {   // row
            for (int k=0; k<N; k++)   // col
                if (M == 1)   // 順時針
                    printf("%5d", R[j][k]);
                else   // 逆時針
                    printf("%5d", R[k][j]);   // 行列交換
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

 
ZeroJudge Forum