우주 비행사 (시뮬레이션)

문제 설명 :
  우주 비행사가 우주에서 방향을 잃었습니다. 이제 가상 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);
	}
}

[] ~ ( ̄ ▽  ̄) ~ *

추천

출처blog.csdn.net/with_wine/article/details/113881031