吸取其他朋友的建議,開通博客把自己的代碼都記下來,一方面以激勵自己,一方面以交流,歡迎大家指正。
openjudge 1835 宇航員問題
這個題目關鍵應該是想清楚可以用三個變量記錄相對方向,相對方向的值就是絕對方向。
想到這層應該問題就迎刃而解了。
#include <iostream>
using namespace std;
int rev(int a){
return (3+a)%6;
}
int main()
{
//times indicate times to go
int m,times,distance;//distance indicates how many meters astronaut go each time
char a[10];
int x,y,z;
cin>>m;
while(m--){
cin>>times;
int front=0,right=1,up=2;
int dis[6]={0};
while(times--){
cin>>a;
cin>>distance;
x=front;
y=right;
z=up;
switch(a[0]){
case 'l':right=x;front =rev(y);break;
case 'r':front=y;right=rev(x);break;
case 'u':front=z;up=rev(x);break;
case 'd':front=rev(z);up=x;break;
case 'b':front=rev(x);right=rev(y);
default :;
}
dis[front]+=distance;
}
x=dis[0]-dis[3];
y=dis[1]-dis[4];
z=dis[2]-dis[5];
cout<<x<<" "<<y<<" "<<z<<" "<<front<<endl;
}
//cout << "Hello world!" << endl;
return 0;
}