# 實作題 - 骰子 - APCS - by Peter Wang
## 題目資訊
此題為2020.7測驗中的題目2
###### tags: `APCS`
## 題目敘述
給定 n 個骰子排成一列,一開始都是點數 1 朝上,點數 4 朝前,點數 2 朝右 (如下左圖所示),另外骰子的展開圖如下右圖所示。

接下來有 m 次修改操作,每個操作包含兩個整數 a, b
若 a, b 都是正整數,交換編號 a 與編號 b 的骰子的位置。
若 b 為 −1,將編號 a 的骰子向前旋轉。
若 b 為 −2,將編號 a 的骰子向右旋轉。
在 m 次操作結束之後,依序輸出編號 1 到編號 n 的骰子朝上的點數。
### 輸入:
第一行包含兩個正整數 n,m(1≤n≤20,1≤m≤100)。
接下來 m 行每行有兩個整數,第 i 行的兩個正整數表示第 i 次操作。
### 輸出:
在一行輸出 n 個數字以空格分隔,第 i 個數字表示編號 i 的骰子最後朝上的點數。
## 解題思路
找出骰子的規律性作答。
## 程式碼
```clike=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int m;
cin>>m;
int arr[m][2];
int d[n][3];
for(int i=0;i<m;i++){
cin>>arr[i][0];
cin>>arr[i][1];
}
for(int i=0;i<n;i++){
d[i][0]=1;
d[i][1]=4;
d[i][2]=2;
}
int mm=0,nn=0,oo=0;
for(int i=0;i<m;i++){
if(arr[i][0]>0 && arr[i][1]>0){
mm=d[arr[i][0]-1][0];
nn=d[arr[i][0]-1][1];
oo=d[arr[i][0]-1][2];
d[arr[i][0]-1][0]=d[arr[i][1]-1][0];
d[arr[i][0]-1][1]=d[arr[i][1]-1][1];
d[arr[i][0]-1][2]=d[arr[i][1]-1][2];
d[arr[i][1]-1][0]=mm;
d[arr[i][1]-1][1]=nn;
d[arr[i][1]-1][2]=oo;
}
else{
if(arr[i][1]==-1){
int pp=d[arr[i][0]-1][1];
d[arr[i][0]-1][1]=d[arr[i][0]-1][0];
d[arr[i][0]-1][0]=7-pp;
}
else{
int pp=d[arr[i][0]-1][2];
d[arr[i][0]-1][2]=d[arr[i][0]-1][0];
d[arr[i][0]-1][0]=7-pp;
}
}
}
for(int i=0;i<n;i++){
cout<<d[i][0]<<" ";
}
cout<<endl;
}
}
```
## 資料來源
[zerojudge](https://zerojudge.tw/)
[題目敘述](https://zerojudge.tw/ShowProblem?problemid=f580)
## 備註
>[name=PeterWang]
>[time=Sat, Jun 19, 2021 1:48 PM]