#include<iostream>
using namespace std;
int main()
{
char direct[10];
int rev[6] = {3, 4, 5, 0, 1, 2}; // 数组 rev 储存 6 个方向的反向
int f, l, u; // 分别是前,左,上的方向代号
int x, y, z; // 宇航员的绝对位置
int nTest;
cin >> nTest;
for(; nTest >= 1; nTest--)
{
f = 0;
l = 4;
u = 2;
x = y = z = 0;
int nSteps, step;
cin >> nSteps;
while(nSteps--)
{
int temp = f;
cin >> direct >> step;
/* 以下,依据转向与前后左右的代号改变宇航员前后左右,比如'f'时(向前走),前后左右不变
* 向后走('b'),左边反过来,右边反过来,以此类推
*/
switch(direct[0])
{
case 'f':
{
break;
}
case 'b':
{
f = rev[f];
l = rev[l];
break;
}
case 'l':
{
f = l;
l = rev[temp];
break;
}
case 'r':
{
f = rev[l];
l = temp;
break;
}
case 'u':
{
f = u;
u = rev[temp];
break;
}
case 'd':
{
f = rev[u];
u = temp;
break;
}
}
switch(f)
{
case 0: x += step; break;
case 1: y += step; break;
case 2: z += step; break;
case 3: x -= step; break;
case 4: y -= step; break;
case 5: z -= step; break;
}
}
cout << x << " " << y << " " << z << " " << f << endl;
}
return 0;
}
宇航员
最新推荐文章于 2021-10-07 19:25:00 发布