poj 1835 宇航员

//这一模拟题,我之前有接触过,我记得刚开始不会做,然后看了别人的代码,然后再自己写一遍出来,现在再来做的时候,发现自己原来还不会做,所以这次我没有看别人的代码,完全靠自己
//的思考解决了这一题!事实证明:没有经过自己思考的东西是记不住和学不会的,以后需要勤动动脑才可以!谨记!
//最开始我思考这一模拟题的时候,卡住我思路的是:一直想将宇航员的状态在数组中一一表示出来,然后就可以轻松的求出他的坐标了,到后来再详细分析的时候,才发现宇航员的状态是会随着上一次的状态的改变而改变的! 
#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值