poj 1815

模拟,标记六个方向的位置为0,1,2。。。,然后记录当前位置六种走法所要朝向的方向,而我们所需要的就是每个位置的这几个方向,很显然,其中的front所得到的方向就是当前所朝向的方向。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
    int front,back,left,right,up,down;
};
node b_ch(node op)
{
    node tem;
    tem.front=op.back;
    tem.back=op.front;
    tem.left=op.right;
    tem.right=op.left;
    tem.up=op.up;
    tem.down=op.down;
    return tem;
}
node l_ch(node op)
{
    node tem;
    tem.front=op.left;
    tem.back=op.right;
    tem.left=op.back;
    tem.right=op.front;
    tem.up=op.up;
    tem.down=op.down;
    return tem;
}
node r_ch(node op)
{
    node tem;
    tem.front=op.right;
    tem.back=op.left;
    tem.left=op.front;
    tem.right=op.back;
    tem.up=op.up;
    tem.down=op.down;
    return tem;
}
node u_ch(node op)
{
    node tem;
    tem.front=op.up;
    tem.back=op.down;
    tem.left=op.left;
    tem.right=op.right;
    tem.up=op.back;
    tem.down=op.front;
    return tem;
}
node d_ch(node op)
{
    node tem;
    tem.front=op.down;
    tem.back=op.up;
    tem.left=op.left;
    tem.right=op.right;
    tem.up=op.front;
    tem.down=op.back;
    return tem;
}
int main()
{
    int  m;
    cin>>m;
    while(m--)
    {
        int n;
        scanf("%d",&n);
        char op[30];
        int i,dis;
        node td;
        td.front=0,td.back=3,td.left=4,td.right=1,td.up=2,td.down=5;
        int x=0,y=0,z=0;
        for(i=0;i<n;i++)
        {
            scanf("%s %d",op,&dis);
            if(strcmp(op,"forward")==0)
            {
                td=td;
            }
            else if(strcmp(op,"back")==0)  {td=b_ch(td);}
             else if(strcmp(op,"left")==0) {td=l_ch(td);}
            else if(strcmp(op,"right")==0) {td=r_ch(td);}
            else if(strcmp(op,"up")==0) {td=u_ch(td);}
            else {td=d_ch(td);}
            if(td.front==0) {x+=dis;}
            else if(td.front==1) {y+=dis;}
            else if(td.front==2) {z+=dis;}
            else if(td.front==3) {x-=dis;}
            else if(td.front==4) {y-=dis;}
            else  {z-=dis;}
        }
        printf("%d %d %d %d\n",x,y,z,td.front );
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/lj030/archive/2013/05/20/3087899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值