문제 설명 :
우주 비행사가 우주에서 방향을 잃었습니다. 이제 가상 xyz 좌표계가 시작 위치에 설정되어 절대 좌표계라고합니다. 우주 비행사의 앞쪽 방향은 x 축의 양의 방향이고 머리 방향입니다. 는 z 축의 양의 방향입니다., 우주 비행사의 초기 상태는 아래 그림과 같습니다.
이제 6 개의 방향이 각각 레이블이 지정되고 x, y, z의 양의 방향은 0, 1, 2, 음의 방향은 각각 3, 4, 5입니다.이를 절대 방향이라고합니다. 우주 비행사는 우주에서 절대 좌표계의 xyz 축에 평행 한 방향으로 만 걸지만 현재 절대 좌표와 자신이 향하고있는 절대 방향을 알지 못합니다.
임무 설명 :
상대 방향으로 이동하는 우주 비행사의 설명을 기반으로 우주 비행사의 최종 절대 좌표와 절대 방향을 결정하십시오. 상대 방향으로 이동하는 것에 대한 설명과 의미는 다음과 같습니다.
앞으로 x 앞으로 x 미터.
뒤로 x 먼저 돌린 후 x 미터를 걷습니다.
좌회전 x 먼저 좌회전 한 다음 x 미터를 걸어갑니다.
오른쪽 x 먼저 오른쪽으로 돌린 다음 x 미터를 걷습니다.
위로 x 먼저 얼굴을 위로 한 다음 x 미터를 걷습니다.
아래로 x 먼저 얼굴을 아래로 한 다음 x 미터를 걷습니다.
위와 아래는 아래 그림에 나와 있습니다.입력
첫 번째 줄의 양의 정수 m은 테스트 데이터 그룹의 수를 나타냅니다. 각 테스트 데이터 그룹의 첫 번째 줄은 우주 비행사가 걸은 횟수를 나타내는 양의 정수 n (1 <= n <= 10000)입니다. 다음 n 줄의 각 줄에 상대적인 걷기를 하나씩 입력하십시오. 형식은 다음과 같습니다. 여기서 (1 <= x <= 10000은 양의 정수입니다).
산출
각 입력 데이터 세트 및 출력 한 줄 xyzp (공백으로 구분)에 대해 xyz는 우주 비행사 위치의 절대 좌표이고, p는 우주 비행사를 향하는 절대 방향 번호입니다 (0 <= p <= 5).
샘플 입력
1 6 왼쪽 10 오른쪽 11 최대 12 아래로 13 앞으로 14 백 15샘플 출력
23-10 12 3
아이디어 :
왼쪽 : 머리 또는 머리, 얼굴 = 앞 왼쪽, 왼쪽 = (앞 +3) % 6
오른쪽 : 머리 또는 머리, 얼굴 = (앞 왼쪽 +3) % 6, 왼쪽 = 앞;
위쪽 : 머리 = (앞 +3) % 6, face = front, left or left;
이 분석처럼;
구현 코드 :
#include<stdio.h>
int main()
{
int t,n,a;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
char s[10];
/*初始化*/
int x=0,y=0,z=0;
int m=0,zuo=4,tou=2;
int t;
for(int i=0;i<n;i++)
{
scanf("%s%d",s,&a);/*%s的输入不会录入空格*/
if(s[0]=='l')/*这里模拟3个面的方向*/
{
t=m;
m=zuo;
zuo=(t+3)%6;
}
else if(s[0]=='r')
{
t=zuo;
zuo=m;
m=(t+3)%6;
}
else if(s[0]=='u')
{
t=m;
m=tou;
tou=(t+3)%6;
}
else if(s[0]=='d')
{
t=tou;
tou=m;
m=(t+3)%6;
}
else if(s[0]=='b')
{
zuo=(zuo+3)%6;
m=(m+3)%6;
}
if(m==0)/*这里模拟具体的三维位置*/
x+=a;
else if(m==1)
y+=a;
else if(m==2)
z+=a;
else if(m==3)
x-=a;
else if(m==4)
y-=a;
else if(m==5)
z-=a;
}
printf("%d %d %d %d\n",x,y,z,m);
}
}
[] ~ ( ̄ ▽  ̄) ~ *