題目連結:
題目大意:
已知骰子的展開圖為以下:
輸入第一列給定兩正整數 n 、 m (1 ≦ n ≦ 20 , 1 ≦ m ≦ 100),代表有 n 個骰子(依據位置編號為 1 ~ n)且要做 m 次操作。接著有 m 列,每列給定兩整數 a 、 b 。
如果 a 、 b 皆是正整數,則將交換編號 a 與編號 b 的骰子(所以編號 a 的骰子會變成編號 b,反之亦然);
如果 b = -1 ,則將編號 a 的骰子以左右方為旋轉軸「向前」旋轉 90° ;
如果 b = -2 ,則將編號 a 的骰子以前後方為旋轉軸「向右」旋轉 90° 。
一開始所有骰子的點數 1 皆朝上、點數 2 朝右、點數 4 朝前。試問:經過輸入的 m 次操作之後,編號 1 ~ n 的骰子最終各自朝上的點數為何?
範例輸入:
範例輸入 #1
1 2
1 -2
1 -1
範例輸入 #2
3 3
2 -1
3 -2
3 1
範例輸出:
範例輸出 #1
3
範例輸出 #2
5 3 1
解題思維:
也是一題單純的模擬題。
因為題目給定的骰子跟一般的骰子有相同的性質:每個相對面之點數和必等於 7 。因此,我們最少只需要儲存三個面的點數即可,例如題目提及的上、右、前方。
對於 a 、 b 都是正整數的指令想必不需多說,交換即可;對於 b = -1 ,則可以看到原本朝上的點數會變為新的前面、原本後面(記住其點數恰為 7 - 前面之點數)變成新的上面;同理, b = -2 ,原本的上面會變新的右邊、原本的左邊會變成新的上面。
全部模擬完後,直接輸出每顆骰子朝上的點數為多少即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。