这道题有点让我费解
/*
2015年2月26日20:25:11
现在有一个固定初始坐标(300.420)的点,它按照一定的操作命令序列每向前走10个单位长度的距离就左转(V)或右转(A)<span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px;">"A"代表顺时针,"V"代表逆时针</span>。现在要每个操作命令序列来输出这个点的轨迹(并遵循一定的格式)。
输入:每一行是一个实例。每行包含一个非空的长度不超过200的由A和V构成的字符串。以文件结束符表示输入结束。
输出:对于每个输入实例,以以下的例子作为输入标准。
以上图片代表两个实例:V和AVV
实例V的输出为:
300 420 moveto
310 420 lineto
310 430 lineto
stroke
showpage
实例AVV的输出为:
300 420 moveto
310 420 lineto
310 410 lineto
320 410 lineto
320 420 lineto
stroke
showpage
*/
# include <stdio.h>
# include <string.h>
int L=0,R=1,U=2,D=3;//代表左右上下4方向
int dir_A[]={U,D,R,L};//执行A右转操作时4个方向变为对应的UDRL方向
int dir_V[]={D,U,L,R};//执行V左转操作时4个方向变为对应的DULR方向
int dx[]={-10,10,0,0};//左右上下4方向对应的X坐标增量
int dy[]={0,0,10,-10};//y增量
int main(void)
{
char str[200];
while(scanf("%s",&str)!=EOF)
{
getchar(); //吸收回车符。
int x = 310,y = 420; //初始坐标不能为(300,420)而是(310,420)
int cur_dir = 1;//初始的方向始终向右
printf("300 420 moveto\n");
printf("310 420 lineto\n");
printf("str的长度:%d\n", strlen(str));
for(int i = 0; i < strlen(str); i++)
{
char c = str[i];
int new_dir;
if(c == 'A')
{
new_dir = dir_A[cur_dir];
x+=dx[new_dir];//新方向X增量
y+=dy[new_dir];//新方向Y增量
}
else
{
new_dir = dir_V[cur_dir];
x+=dx[new_dir];
y+=dy[new_dir];
}
cur_dir = new_dir;//更新当前方向
printf("%d %d lineto\n", x, y);
}
printf("stroke\n");
printf("showpage\n");
}
return 0;
}