poj1835 宇航员

宇航员在太空中可以上下左右前后六个方向移动

当他移动时面部朝向也随之改变

他听从指令,改变自己的相对方向和距离

最终输出他的绝对方向。

输入m测试数据组数,n行走次数,每步包含方向和距离

输出绝对坐标,以及面向方向p

http://poj.org/problem?id=1835

①三维坐标方向需要由三个变量控制是本题的关键

②然后发现x,y,z正方向分别为0,1,2,负方向分别为3,4,5

正方向与负方向正好差3,所以用到p=(p+3)%6等等

 1 #include <stdio.h>
 2 char action[10005];
 3 int xx,yy,zz;
 4 void gogogo(int p,int x)    //向某个方向p走x步
 5 {
 6     switch(p)
 7     {
 8         case 0: xx+=x;break;
 9         case 3: xx-=x;break;
10         case 1:yy+=x;break;
11         case 4:yy-=x;break;
12         case 2:zz+=x;break;
13         default:zz-=x;
14     }
15 }
16 
17 int main()
18 {
19     int m;
20     scanf("%d",&m);
21     while(m--)
22     {
23         xx=yy=zz=0;     //xx,yy,zz是绝对坐标,此时定义为0
24         int n, x, p=0,left=4,t,head=2;
25                 //用宇航员自身的p前,left左,head上三个方向确定绝对方向
26         scanf("%d",&n);
27         for(int i=0;i<n;i++)
28         {
29             getchar();
30             scanf("%s%d",action,&x);
31             switch(action[0])       
32                 //由于方向left right up down forward back第一个就不同,此处比较第一个字母就可以了
33             {
34                 case 'f': break;
35                 //向前都不变
36                 case 'b': p=(p+3)%6,left=(left+3)%6;break;
37                 //p和l改变
38                 case 'l': t=p,p=left,left=(t+3)%6;break;
39                 case 'r':t=p,p=(left+3)%6,left=t;break;
40                 case 'u':t=p,p=head,head=(t+3)%6;break;
41                 case 'd':t=p,p=(head+3)%6,head=t;break;
42                 default: ;
43             }
44             gogogo(p,x);    
45             //最终p方向确定了,向p走x步
46         }
47         printf("%d %d %d %d\n",xx,yy,zz,p);
48     }
49     return 0;
50 }

第一次做三维空间方向的题,虽然不太适应。。。但是感觉挺基础。。也挺有意思。。

posted @ 2014-01-24 15:56  Yuer~  阅读(615)  评论(0编辑  收藏  举报