題目連結: 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; | |
} |