e516 - 10409 - Die Game
題目描述
題目描述了一個骰子的滾動模擬遊戲。初始時,骰子的頂面是 1,北面是 2,西面是 3。給定一系列滾動指令(東、南、西、北),要求模擬骰子的滾動,並輸出最終頂面上的數字。
解題思路
這題的核心在於理解骰子的滾動規則,以及如何根據指令更新骰子的各個面。由於骰子的相對面數字和為 7,因此可以通過預先定義好各個面的初始值,然後根據指令進行面的旋轉來模擬滾動。程式碼中 ans 陣列儲存了骰子的各個面,ans[0] 代表頂面,ans[1] 代表上,ans[2] 代表左,ans[3] 代表下,ans[4] 代表右,ans[5] 代表後。根據指令,將 ans 陣列中的元素進行相應的交換,模擬骰子的滾動。
複雜度分析
- 時間複雜度: O(n),其中 n 是指令序列的長度。因為程式碼需要遍歷指令序列一次。
- 空間複雜度: O(1),因為程式碼只使用了固定大小的
ans陣列來儲存骰子的各個面。
程式碼
#include <iostream>
using namespace std;
string a;
int main(){
int t;
while(cin >> t){
if(t==0)break;
int ans[6]={1,2,3,5,4,6};//正 上 左 下 右 後
while(t--){
cin >> a;
if(a[0]=='s'){
int tmp=ans[0];
ans[0]=ans[1];
ans[1]=ans[5];
ans[5]=ans[3];
ans[3]=tmp;
}
else if(a[0]=='e'){
int tmp=ans[0];
ans[0]=ans[2];
ans[2]=ans[5];
ans[5]=ans[4];
ans[4]=tmp;
}
else if(a[0]=='n'){
int tmp=ans[0];
ans[0]=ans[3];
ans[3]=ans[5];
ans[5]=ans[1];
ans[1]=tmp;
}
else{
int tmp=ans[0];
ans[0]=ans[4];
ans[4]=ans[5];
ans[5]=ans[2];
ans[2]=tmp;
}
}
cout << ans[0] << "\n";
}
}