//这一模拟题,我之前有接触过,我记得刚开始不会做,然后看了别人的代码,然后再自己写一遍出来,现在再来做的时候,发现自己原来还不会做,所以这次我没有看别人的代码,完全靠自己
//的思考解决了这一题!事实证明:没有经过自己思考的东西是记不住和学不会的,以后需要勤动动脑才可以!谨记!
//最开始我思考这一模拟题的时候,卡住我思路的是:一直想将宇航员的状态在数组中一一表示出来,然后就可以轻松的求出他的坐标了,到后来再详细分析的时候,才发现宇航员的状态是会随着上一次的状态的改变而改变的!
#include "iostream"
#include "string"
using namespace std;
int solve(string str, int *a);根据宇航员的上一次状态求出宇航员的下一次的状态值!
int ans[6], temp[6];
int main()
{
int T, step, i, j, dis, x, y, z, p;
string move;
cin >> T;
while (T--)
{
cin >> step;
x = y = z = p = 0;
temp[0] = 0, temp[1] = 3, temp[2] = 4, temp[3] = 1, temp[4] = 2, temp[5] = 5;//宇航员的最初始状态!
for (i = 0; i < step; i++)
{
cin >> move >> dis;
solve(move, temp);
for (j = 0; j < 6; j++)
temp[j] = ans[j];
p = ans[0];//宇航员的绝对方向!
if (p == 4)
y -= dis;
else if (p == 1)
y += dis;
else if (p == 0)
x += dis;
else if (p == 3)
x -= dis;
else if (p == 2)
z += dis;
else if (p == 5)
z -= dis;
}
cout << x << " " << y << " " << z << " " << p << endl;
}
return 0;
}
int solve(string str, int *a)
{
if (str == "forward")
{
ans[0] = a[0];
ans[1] = a[1];
ans[2] = a[2];
ans[3] = a[3];
ans[4] = a[4];
ans[5] = a[5];
}
else if (str == "back")
{
ans[0] = a[1];
ans[1] = a[0];
ans[2] = a[3];
ans[3] = a[2];
ans[4] = a[4];
ans[5] = a[5];
}
else if (str == "left")
{
ans[0] = a[2];
ans[1] = a[3];
ans[2] = a[1];
ans[3] = a[0];
ans[4] = a[4];
ans[5] = a[5];
}
else if (str == "right")
{
ans[0] = a[3];
ans[1] = a[2];
ans[2] = a[0];
ans[3] = a[1];
ans[4] = a[4];
ans[5] = a[5];
}
else if (str == "up")
{
ans[0] = a[4];
ans[1] = a[5];
ans[2] = a[2];
ans[3] = a[3];
ans[4] = a[1];
ans[5] = a[0];
}
else if (str == "down")
{
ans[0] = a[5];
ans[1] = a[4];
ans[2] = a[2];
ans[3] = a[3];
ans[4] = a[0];
ans[5] = a[1];
}
return 0;
}
poj 1835 宇航员
最新推荐文章于 2020-05-09 20:40:51 发布