第6章练习题--1--宇航员--1835

本题思路:

采用变量f , l , u 表示forward、left、up三个方向,f 可以取值0,3,l 可以取值1,4,u 取值 2,5 。

当宇航员的绝对方向发生变化时,三个变量的变化规律如下所示

 forwardleftup
forward不变不变不变
back - forward - left不变
left left - forward不变
right - leftforward不变
upup不变 - forward
down - up不变forward
其中‘-’号表示取反方向,0与3,1与4,2与5互为反方向。

AC代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int rev(int a)
{
	if( a == 0 ) return 3;
	if( a == 1 ) return 4;
	if( a == 2 ) return 5;
	if( a == 3 ) return 0;
	if( a == 4 ) return 1;
	if( a == 5 ) return 2;
}

int main(int argc, char *argv[])
{
    int m, n; 
	int x, y, z, dis;
    int f, l, u, tmp;//表示forward、left、up
    char dir[10];
    
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d",&n);
        x = y = z = 0;
        f = 0 ;
        l = 4 ;
        u = 2 ;
        while(n--)
        {
            scanf("%s %d",dir,&dis);
            switch(dir[0])
            {
                case 'f':
                     break;
                case 'b':
                     f = rev(f) ;
                     l = rev(l) ; 
                     break;
                case 'l':
                     tmp = f ;
                     f = l;
                     l = rev(tmp) ;
                     break;
                case 'r':
                     tmp = f;
                     f = rev(l);
                     l = tmp;
                     break;
                case 'u':
                     tmp = f ;
                     f = u;
                     u = rev(tmp) ;
                     break;
                case 'd':
                     tmp = f ;
                     f = rev(u);
                     u = tmp;
                     break;
            }
            switch(f)
            {
                     case 0: x += dis; break;
                     case 1: y += dis; break;
                     case 2: z += dis; break; 
                     case 3: x -= dis; break;
                     case 4: y -= dis; break;
                     case 5: z -= dis; break;
            }
        }
        printf("%d %d %d %d\n",x,y,z,f);
    } 
  
  return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值