題目連結:
給定一正整數 n (n ≦ 1024,n = 0 時代表輸入結束),代表有接著有 n 列。每列給定一個指令,指令只會是「east」、「south」、「west」或「north」其中一個。
現在有一個骰子,分為北、東、南、西面以及頂面和底面這六個面。當遇到「east」指令代表往「東面」的方向轉,因此原本的頂面變成新的東面、原本的西面變成新的頂面、原本的東面變成新的底面、原本的底面變成新的西面;其他指令以此類推。
一開始骰子的頂面、北面、西面,依序的點數為 1 、 2 、 3 且這是一個典型的骰子,因此每個相對的面之點數總和必為 7 。
求經過這 n 個指令後,骰子頂面的點數為多少?
單純的模擬即可。
因為骰子有每個相對的面總何必為 7 的性質。因此不用六個面全部存著,只要存三面就好,及題目提及的頂面、北面以及西面。
接著就是直接模擬——例如碰到「east」的指令,先暫存原先頂面的值。然後把西面的值複製到頂面,再用 7 減去剛剛複製頂面的值(即底面)複製到西面上。即完成一次旋轉。剩下的指令也同理。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。