模拟题 #include<cstdio> void move(int &x, int &y, int &z, int stat,int l) { switch(stat) { case 0:x += l;break; case 3:x -= l;break; case 1:y += l;break; case 4:y -= l;break; case 2:z += l;break; case 5:z -= l;break; } } int main() { int zu;char ch[8]; scanf("%d",&zu); for(int i = 0;i < zu; i++) { int n, l, x = 0, y = 0, z = 0; //其实坐标 int stat[3] = { 0, 4, 2}; //前、左、上 起始状态 scanf("%d",&n); for(int j = 0;j < n; j++) { scanf("%s %d",&ch, &l); switch(ch[0]) { case 'f': move(x,y,z,stat[0],l); break; case 'b': { stat[0] = stat[0]<3 ? stat[0]+3 : stat[0]-3; stat[1] = stat[1]<3 ? stat[1]+3 : stat[1]-3; move(x,y,z,stat[0],l); } break; case 'l': { stat[0] = stat[0]<3 ? stat[0]+3 : stat[0]-3; int temp; temp = stat[0]; stat[0] = stat[1];stat[1] = temp; move(x,y,z,stat[0],l); } break; case 'r': { stat[1] = stat[1]<3 ? stat[1]+3 : stat[1]-3; int temp; temp = stat[0]; stat[0] = stat[1]; stat[1] = temp; move(x,y,z,stat[0],l); } break; case 'u': { stat[0] = stat[0]<3 ? stat[0]+3 : stat[0]-3; int temp; temp = stat[0]; stat[0] = stat[2]; stat[2] = temp; move(x,y,z,stat[0],l); } break; case 'd': { stat[2] = stat[2]<3 ? stat[2]+3 : stat[2]-3; int temp; temp = stat[0]; stat[0] = stat[2];stat[2] = temp; move(x,y,z,stat[0],l); } break; } } printf("%d %d %d %d/n",x,y,z,stat[0]); } return 0; }