算法丑陋,代码过长,还望指教。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int x_set = 0,y_set = 0,z_set = 0,times,rows,direction=0,move;
char left[10]="left",right[10]="right",up[10]="up",down[10]="down",forw[10]="forward",bac[10]="back",operation[10];
void a0_sol()//all right
{
if(!strcmp(left,operation)){direction=12; y_set-=move;}
if(!strcmp(right,operation)){direction=8; y_set+=move;}
if(!strcmp(up,operation)){direction=21; z_set+=move;}
if(!strcmp(down,operation)){direction=17; z_set-=move;}
if(!strcmp(forw,operation)){direction=0; x_set+=move;}
if(!strcmp(bac,operation)){direction=4; x_set-=move;}
}
void a1_sol()//
{
if(!strcmp(left,operation)){direction=22; z_set+=move;}
if(!strcmp(right,operation)){direction=18; z_set-=move;}
if(!strcmp(up,operation)){direction=9; y_set+=move;}
if(!strcmp(down,operation)){direction=13; y_set-=move;}
if(!strcmp(forw,operation)){direction=1; x_set+=move;}
if(!strcmp(bac,operation)){direction=7; x_set-=move;}
}
void a2_sol()//
{
if(!strcmp(left,operation)){direction=10; y_set+=move;}
if(!strcmp(right,operation)){direction=14; y_set-=move;}
if(!strcmp(up,operation)){direction=19; z_set-=move;}
if(!strcmp(down,operation)){direction=23; z_set+=move;}
if(!strcmp(forw,operation)){direction=2; x_set+=move;}
if(!strcmp(bac,operation)){direction=6; x_set-=move;}
}
void a3_sol()//
{
if(!strcmp(left,operation)){direction=16; z_set-=move;}
if(!strcmp(right,operation)){direction=20; z_set+=move;}
if(!strcmp(up,operation)){direction=15; y_set-=move;}
if(!strcmp(down,operation)){direction=11; y_set+=move;}
if(!strcmp(forw,operation)){direction=3; x_set+=move;}
if(!strcmp(bac,operation)){direction=5; x_set-=move;}
}
void a4_sol()//
{
if(!strcmp(left,operation)){direction=8; y_set+=move;}
if(!strcmp(right,operation)){direction=12; y_set-=move;}
if(!strcmp(up,operation)){direction=23; z_set+=move;}
if(!strcmp(down,operation)){direction=19; z_set-=move;}
if(!strcmp(forw,operation)){direction=4; x_set-=move;}
if(!strcmp(bac,operation)){direction=0; x_set+=move;}
}
void a5_sol()//
{
if(!strcmp(left,operation)){direction=20; z_set+=move;}
if(!strcmp(right,operation)){direction=16; z_set-=move;}
if(!strcmp(up,operation)){direction=13; y_set-=move;}
if(!strcmp(down,operation)){direction=9; y_set+=move;}
if(!strcmp(forw,operation)){direction=5; x_set-=move;}
if(!strcmp(bac,operation)){direction=3; x_set+=move;}
}
void a6_sol()//
{
if(!strcmp(left,operation)){direction=14; y_set-=move;}
if(!strcmp(right,operation)){direction=10; y_set+=move;}
if(!strcmp(up,operation)){direction=17; z_set-=move;}
if(!strcmp(down,operation)){direction=21; z_set+=move;}
if(!strcmp(forw,operation)){direction=6; x_set-=move;}
if(!strcmp(bac,operation)){direction=2; x_set+=move;}
}
void a7_sol()//
{
if(!strcmp(left,operation)){direction=18; z_set-=move;}
if(!strcmp(right,operation)){direction=22; z_set+=move;}
if(!strcmp(up,operation)){direction=11; y_set+=move;}
if(!strcmp(down,operation)){direction=15; y_set-=move;}
if(!strcmp(forw,operation)){direction=7; x_set-=move;}
if(!strcmp(bac,operation)){direction=1; x_set+=move;}
}
void a8_sol()//
{
if(!strcmp(left,operation)){direction=0; x_set+=move;}
if(!strcmp(right,operation)){direction=4; x_set-=move;}
if(!strcmp(up,operation)){direction=20; z_set+=move;}
if(!strcmp(down,operation)){direction=18; z_set-=move;}
if(!strcmp(forw,operation)){direction=8; y_set+=move;}
if(!strcmp(bac,operation)){direction=12; y_set-=move;}
}
void a9_sol()//
{
if(!strcmp(left,operation)){direction=21; z_set+=move;}
if(!strcmp(right,operation)){direction=19; z_set-=move;}
if(!strcmp(up,operation)){direction=5; x_set-=move;}
if(!strcmp(down,operation)){direction=1; x_set+=move;}
if(!strcmp(forw,operation)){direction=9; y_set+=move;}
if(!strcmp(bac,operation)){direction=15; y_set-=move;}
}
void a10_sol()//
{
if(!strcmp(left,operation)){direction=6; x_set-=move;}
if(!strcmp(right,operation)){direction=2; x_set+=move;}
if(!strcmp(up,operation)){direction=16; z_set-=move;}
if(!strcmp(down,operation)){direction=22; z_set+=move;}
if(!strcmp(forw,operation)){direction=10; y_set+=move;}
if(!strcmp(bac,operation)){direction=14; y_set-=move;}
}
void a11_sol()//
{
if(!strcmp(left,operation)){direction=17; z_set-=move;}
if(!strcmp(right,operation)){direction=23; z_set+=move;}
if(!strcmp(up,operation)){direction=3; x_set+=move;}
if(!strcmp(down,operation)){direction=7; x_set-=move;}
if(!strcmp(forw,operation)){direction=11; y_set+=move;}
if(!strcmp(bac,operation)){direction=13; y_set-=move;}
}
void a12_sol()//
{
if(!strcmp(left,operation)){direction=4; x_set-=move;}
if(!strcmp(right,operation)){direction=0; x_set+=move;}
if(!strcmp(up,operation)){direction=22; z_set+=move;}
if(!strcmp(down,operation)){direction=16; z_set-=move;}
if(!strcmp(forw,operation)){direction=12; y_set-=move;}
if(!strcmp(bac,operation)){direction=8; y_set+=move;}
}
void a13_sol()//
{
if(!strcmp(left,operation)){direction=23; z_set+=move;}
if(!strcmp(right,operation)){direction=17; z_set-=move;}
if(!strcmp(up,operation)){direction=1; x_set+=move;}
if(!strcmp(down,operation)){direction=5; x_set-=move;}
if(!strcmp(forw,operation)){direction=13; y_set-=move;}
if(!strcmp(bac,operation)){direction=11; y_set+=move;}
}
void a14_sol()//
{
if(!strcmp(left,operation)){direction=2; x_set+=move;}
if(!strcmp(right,operation)){direction=6; x_set-=move;}
if(!strcmp(up,operation)){direction=18; z_set-=move;}
if(!strcmp(down,operation)){direction=20; z_set+=move;}
if(!strcmp(forw,operation)){direction=14; y_set-=move;}
if(!strcmp(bac,operation)){direction=10; y_set+=move;}
}
void a15_sol()//
{
if(!strcmp(left,operation)){direction=19; z_set-=move;}
if(!strcmp(right,operation)){direction=21; z_set+=move;}
if(!strcmp(up,operation)){direction=7; x_set-=move;}
if(!strcmp(down,operation)){direction=3; x_set+=move;}
if(!strcmp(forw,operation)){direction=15; y_set-=move;}
if(!strcmp(bac,operation)){direction=9; y_set+=move;}
}
void a16_sol()//
{
if(!strcmp(left,operation)){direction=5; x_set-=move;}
if(!strcmp(right,operation)){direction=3; x_set+=move;}
if(!strcmp(up,operation)){direction=12; y_set-=move;}
if(!strcmp(down,operation)){direction=10; y_set+=move;}
if(!strcmp(forw,operation)){direction=16; z_set-=move;}
if(!strcmp(bac,operation)){direction=20; z_set+=move;}
}
void a17_sol()//
{
if(!strcmp(left,operation)){direction=13; y_set-=move;}
if(!strcmp(right,operation)){direction=11; y_set+=move;}
if(!strcmp(up,operation)){direction=0; x_set+=move;}
if(!strcmp(down,operation)){direction=6; x_set-=move;}
if(!strcmp(forw,operation)){direction=17; z_set-=move;}
if(!strcmp(bac,operation)){direction=23; z_set+=move;}
}
void a18_sol()//
{
if(!strcmp(left,operation)){direction=1; x_set+=move;}
if(!strcmp(right,operation)){direction=7; x_set-=move;}
if(!strcmp(up,operation)){direction=8; y_set+=move;}
if(!strcmp(down,operation)){direction=14; y_set-=move;}
if(!strcmp(forw,operation)){direction=18; z_set-=move;}
if(!strcmp(bac,operation)){direction=22; z_set+=move;}
}
void a19_sol()//
{
if(!strcmp(left,operation)){direction=9; y_set+=move;}
if(!strcmp(right,operation)){direction=15; y_set-=move;}
if(!strcmp(up,operation)){direction=4; x_set-=move;}
if(!strcmp(down,operation)){direction=2; x_set+=move;}
if(!strcmp(forw,operation)){direction=19; z_set-=move;}
if(!strcmp(bac,operation)){direction=21; z_set+=move;}
}
void a20_sol()//
{
if(!strcmp(left,operation)){direction=3; x_set+=move;}
if(!strcmp(right,operation)){direction=5; x_set-=move;}
if(!strcmp(up,operation)){direction=14; y_set-=move;}
if(!strcmp(down,operation)){direction=8; y_set+=move;}
if(!strcmp(forw,operation)){direction=20; z_set+=move;}
if(!strcmp(bac,operation)){direction=16; z_set-=move;}
}
void a21_sol()//
{
if(!strcmp(left,operation)){direction=15; y_set-=move;}
if(!strcmp(right,operation)){direction=9; y_set+=move;}
if(!strcmp(up,operation)){direction=6; x_set-=move;}
if(!strcmp(down,operation)){direction=0; x_set+=move;}
if(!strcmp(forw,operation)){direction=21; z_set+=move;}
if(!strcmp(bac,operation)){direction=19; z_set-=move;}
}
void a22_sol()//
{
if(!strcmp(left,operation)){direction=7; x_set-=move;}
if(!strcmp(right,operation)){direction=1; x_set+=move;}
if(!strcmp(up,operation)){direction=10; y_set+=move;}
if(!strcmp(down,operation)){direction=12; y_set-=move;}
if(!strcmp(forw,operation)){direction=22; z_set+=move;}
if(!strcmp(bac,operation)){direction=18; z_set-=move;}
}
void a23_sol()//
{
if(!strcmp(left,operation)){direction=11; y_set+=move;}
if(!strcmp(right,operation)){direction=13; y_set-=move;}
if(!strcmp(up,operation)){direction=2; x_set+=move;}
if(!strcmp(down,operation)){direction=4; x_set-=move;}
if(!strcmp(forw,operation)){direction=23; z_set+=move;}
if(!strcmp(bac,operation)){direction=17; z_set-=move;}
}
int main()
{
scanf("%d",×);
while(times)
{
scanf("%d",&rows);
while(rows)
{
scanf("%s",operation);
scanf("%d",&move);
switch(direction)
{
case 0: a0_sol();break;
case 1: a1_sol();break;
case 2: a2_sol();break;
case 3: a3_sol();break;
case 4: a4_sol();break;
case 5: a5_sol();break;
case 6: a6_sol();break;
case 7: a7_sol();break;
case 8: a8_sol();break;
case 9: a9_sol();break;
case 10: a10_sol();break;
case 11: a11_sol();break;
case 12: a12_sol();break;
case 13: a13_sol();break;
case 14: a14_sol();break;
case 15: a15_sol();break;
case 16: a16_sol();break;
case 17: a17_sol();break;
case 18: a18_sol();break;
case 19: a19_sol();break;
case 20: a20_sol();break;
case 21: a21_sol();break;
case 22: a22_sol();break;
case 23: a23_sol();break;
}
rows--;
}
times--;
printf("%d %d %d ",x_set,y_set,z_set);
switch(direction)
{
case 0:
case 1:
case 2:
case 3:printf("%d\n",0);break;
case 4:
case 5:
case 6:
case 7:printf("%d\n",3);break;
case 8:
case 9:
case 10:
case 11:printf("%d\n",1);break;
case 12:
case 13:
case 14:
case 15:printf("%d\n",4);break;
case 16:
case 17:
case 18:
case 19:printf("%d\n",5);break;
case 20:
case 21:
case 22:
case 23:printf("%d\n",2);break;
}
x_set=y_set=z_set=direction=0;
}
return 0;
}