前往
大廳
主題

ZeroJudge - f580: 2. 骰子 解題心得

Not In My Back Yard | 2021-01-05 00:00:01 | 巴幣 0 | 人氣 675

題目連結:


題目大意:
已知骰子的展開圖為以下:

輸入第一列給定兩正整數 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 ,原本的上面會變新的右邊、原本的左邊會變成新的上面。

全部模擬完後,直接輸出每顆骰子朝上的點數為多少即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作