POJ 1835宇航员

13人阅读 评论(1) 收藏 举报
分类:

宇航员
Time Limit: 2000MS Memory Limit: 30000K
Total Submissions: 6882 Accepted: 2932
Description

问题描述:
  宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示:

现对六个方向分别标号,x,y,z正方向分别为0,1,2,负方向分别为3,4,5;称它们为绝对方向。宇航员在宇宙中只沿着与绝对坐标系xyz轴平行的方向行走,但是他不知道自己当前绝对坐标和自己面向的绝对方向。

任务描述:
  请根据宇航员对自己在相对方向上移动的描述确定宇航员最终的绝对坐标和面向的绝对方向。对在相对方向上移动的描述及意义如下:
forward x  向前走x米。
back x 先转向后,再走x米。
left x 先转向左,再走x米。
right x 先转向右,再走x米。
up x 先面向上,再走x米。
down x 先面向下,再走x米。
其中向上和向下如下图所示:

Input

第一行一个正整数m,表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示宇航员行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000 为正整数)。
Output

对于每组输入数据输出一行,x y z p, 中间用空格隔开,x y z是宇航员的位置的绝对坐标,p是宇航员面向的绝对方向编号(0<=p <=5)。
Sample Input

1
6
left 10
right 11
up 12
down 13
forward 14
back 15
Sample Output

23 -10 12 3
题目源地址:http://poj.org/problem?id=1835
题目大意:宇航员在太Jon各种可以上下左右前后六个方向移动,当他移动时,面部朝向也随之改变。他听从指令,改变自己的相对方向和距离,最终输出他的绝对方向。输入m组测试数据组数,宇航员的行走次数n,每次行走包括方向和距离,输出绝对坐标,以及面向方向forward.
解题思路:怎样才能知道每次转向后他的forward应该怎样变,其实不难发现六个方向中只有三个方向是有用的左或右,上或下,前或后,应为知道其中的一个就知道他的反方向是那个,这个可以从题目中推出来,每个绝对方向的反方向为(x+3)%6 ,所以说到这里应该就知道怎么做了,用六个变量记录,坐标(x,y,z)和三个方向forward,left,up。然后就不难推出转向后三个方向怎么变化,不管绝对坐标在哪里,每次绝对方向的变化只和转换的方向有关,我这里举个例子:比如向左转,up不变,forward变为原来的left,left变为原来(forward+3)%6即foward的反方向。(当然也可以打个表表示每个方向的反方向)。
forward(向前走):方向不变。
back(向后走):原来相对于宇航员的方向变为现在相对于宇航员的方向。
左变为右。右变为左。
前变为后。后变为前。
上下方向不变。
left(向左走):原来相对于宇航员的方向变为现在相对于宇航员的方向。
左变为前,右变为后。
前变为右,后变为左。
上下方向不变。
right(向右走):原来相对于宇航员的方向变为现在相对于宇航员的方向。
左变为后,右变为前。
前变为左,后变为右。
上下方向不变。
up(向上走):
左变为右,右变为左。
前变为上,后变为下。
上变为前,下变为后。
down(向下走):
左右方向不变。
前变为下,后变为上。
上变为后,下变为前。
代码如下:

#include <stdio.h>
#include <stdlib.h>
int xx,yy,zz;//存储宇航员绝对坐标
char action[100010];//宇航员行走的方向
void Go(int forward,int x)
{
    switch(forward)
    {
    case 0:
        xx+=x;
        break;
    case 3:
        xx-=x;
        break;
    case 1:
        yy+=x;
        break;
    case 4:
        yy-=x;
        break;
    case 2:
        zz+=x;
        break;
    default:
        zz-=x;
    }
}
int main()
{
    int m;
    scanf("%d",&m);//测试数据组数
    while(m--)
    {
        xx = yy = zz = 0;//绝对坐标,此时定义为0
        int n;
        scanf("%d",&n);//本次测试中,宇航员行走的次数
        int forward = 0;
        int left = 4;
        int  up =  2;
        int x;//某方向的行走步数
        int i;
        int t;
        for(i=0; i<n; i++)
        {
            getchar();
            scanf("%s%d",action,&x);
            switch(action[0])
                //方向left,right,up,down,forward,back第一个字母就不一样,所以比较第一个字符就可以
            {
            case 'f':
                break;
            case 'b':
                forward = (forward+3)%6;
                left = (left+3)%6;
                break;
            case 'l':
                t = forward;
                forward = left;
                left = (t+3)%6;
                break;
            case 'r':
                t = forward;
                forward = (left+3)%6;
                left = t;
                break;
            case 'u':
                t = forward;
                forward = up;
                up = (t+3)%6;
                break;
            case 'd':
                t = forward;
                forward = (up+3)%6;
                up = t;
                break;
                default:;
            }
            Go(forward,x);
        }
        printf("%d %d %d %d\n",xx,yy,zz,forward);
    }
    return 0;
}
查看评论

基于H.320和H.323会议电视系统的技术发展

基于H.320和H.323会议电视系统的技术发展 信息产业部电信传输研究所中国泰尔实验室 刘晓红 ...
  • tchaikov
  • tchaikov
  • 2001-01-03 16:12:00
  • 987

POJ - 1835 - 模拟

题目链接:POJ-1835 题目大意: 宇航员在太空中行走,给定一个三维坐标系(x,y,z轴的正方向标号分别为0,1,2,负方向标号分别为3,4,5),他的起始位置为原点,面向X轴正方向(标号为0)。...
  • qq_34731703
  • qq_34731703
  • 2016-09-01 09:21:09
  • 375

POJ 1835 宇航员 (模拟&三维向量旋转)

宇航员 http://poj.org/problem?id=1835 Time Limit: 2000MS Memory Limit: 30000K Description 问题描述...
  • synapse7
  • synapse7
  • 2013-10-24 00:23:07
  • 2143

poj 1835 宇航员(模拟)

宇航员Description问题描述:   宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始...
  • blessLZH0108
  • blessLZH0108
  • 2017-03-29 16:21:55
  • 319

poj解题报告——1835

一个立体几何的问题,划归成模拟量做,一共是六个方向 #include #include #include using namespace std; int arr[6][6]; char dir...
  • Lingfu74
  • Lingfu74
  • 2015-07-19 09:47:07
  • 312

POJ - 1835 宇航员(模拟题)

问题描述:   宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示:   现对...
  • qq_35806592
  • qq_35806592
  • 2017-04-03 15:19:11
  • 516

POJ 1835 - 宇航员 (模拟)

宇航员 Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 6542   Accepted: ...
  • Mr_Treeeee
  • Mr_Treeeee
  • 2017-11-21 21:54:53
  • 119

POJ - 1835 - 宇航员

宇航员 Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 6505   Accepted: ...
  • w326159487
  • w326159487
  • 2017-11-20 12:11:31
  • 33

POJ 1835 宇航员

原题 http://poj.org/problem?id=1835相比普通的平面移动,本题的空间立体移动的难点在于方向的改变,平面移动有4种方向,但是立体移动有6*4种方向(面朝的方向有6种,每面有...
  • qq_27508477
  • qq_27508477
  • 2015-07-26 12:42:43
  • 598

POJ 1835 宇航员 解题报告

题意&amp;amp;样例:宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示:现对...
  • EricGipsy
  • EricGipsy
  • 2018-04-01 17:42:48
  • 11
    个人资料
    等级:
    访问量: 187
    积分: 35
    排名: 193万+
    文章分类
    文章存档
    最新评论