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;
}