# 實作題 - 骰子 - APCS - by Peter Wang ## 題目資訊 此題為2020.7測驗中的題目2 ###### tags: `APCS` ## 題目敘述 給定 n 個骰子排成一列,一開始都是點數 1 朝上,點數 4 朝前,點數 2 朝右 (如下左圖所示),另外骰子的展開圖如下右圖所示。 ![](https://i.imgur.com/9h1CnaW.png) 接下來有 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]