>author: Utin
## Question

網絡戰神宣稱已將5顆炸彈放置在清華大學內了,根據信件內容,已經在台達4樓的女廁發現其中一顆炸彈,上面有網絡戰神設下的方陣密碼,請你幫助警方破解正確的方陣密碼。
### Input
第一行有兩個整數 R, C,分別代表方陣的高度與寬度
接著會有 R 列 C 行的整數,代表加密後方陣的狀態,數字不會重複(0~99)
然後會有一個整數 N,代表接下來要做幾次翻轉
接著會有 N 列的整數,分別為旋轉方陣起始位置的列、行以及寬度,最後一個數字弱是1,請順時針旋轉90度,0則逆時針旋轉90度
### Output
輸出最後方陣的狀態,數字寬度必須設為2格
### Constraint
2 <= R, C <= 10
1 <= N <= 1000
### Sample Input
```=
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2
1 1 2 1
1 1 3 0
```
```=
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
1
0 0 4 1
```
### Sample Output
```=
1 2 3 4
5 8 12 16
9 6 7 15
13 10 11 14
```
```=
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
```
## 作法
雙重迴圈搭配二維陣列。
## 常見問題
- scanf 記得取址
- 注意旋轉方向
- 輸出要用 %2d
## 解法
```c=
#include <stdio.h>
int R, C, T, row, col, range, dir;
int arr[15][15];
int tmp[15][15];
int main() {
// input
scanf("%d %d", &R, &C);
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
scanf("%d", &arr[i][j]);
}
}
// T test cases
scanf("%d", &T);
while (T--) {
scanf("%d %d %d %d", &row, &col, &range, &dir);
// clockwise
if (dir) {
for (int i = row; i < row + range; i++) {
for (int j = col; j < col + range; j++) {
tmp[i][j] = arr[row + range - j - 1 + col][i - row + col];
}
}
}
// counter clockwise
else {
for (int i = row; i < row + range; i++) {
for (int j = col; j < col + range; j++) {
tmp[i][j] = arr[j - col + row][col + range - i - 1 + row];
}
}
}
// update
for (int i = row; i < row + range; i++) {
for (int j = col; j < col + range; j++) {
arr[i][j] = tmp[i][j];
}
}
}
// output
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
printf("%2d", arr[i][j]);
printf(j == C - 1 ? "\n" : " ");
}
}
}
```