这道题呢,其实就是个简单模拟,然而出题人把题目写的非常难以理解。
这题大概意思等价于:有个人,它从点(300,420)出发,先向X轴正方向走一步(一步是10),此时他面朝X轴正方向。然后开始按照输入的指令走,如果指令是V,这人就向他左手边走一步,如果指令是A,他就向右手边走一步;此人往哪个方向走了一步,他现在就面朝哪个方向;比如最初面朝X轴正方向,向左走了一步,那么显然,此人目前面朝Y轴正方向。
模拟
AC代码如下:
#include<iostream>
#include<cstring>
#define MAX 205
#define STEP 10
char input[MAX];
using namespace std;
int main()
{
int startX = 300, startY = 420, x, y, direc;
while (cin >> input)
{
x = startX;
y = startY;
printf("%d %d moveto\n", x, y);
x += STEP;
direc = 1;//第一步 向右走
printf("%d %d lineto\n", x, y);
for (int i = 0; i < strlen(input); i++)
{
switch(direc)
{
case 1: //面朝x轴正方向
if (input[i] == 'V') //向左走,即向Y轴正方向移动
{
y += STEP;
direc = 2; //走完之后面朝Y轴正方向
}
else
{
y -= STEP;
direc = 4; //走完之后面朝Y轴负方向
}
break;
case 3: //面朝 X 轴负方向
if (input[i] == 'V')
{
y -= STEP;
direc = 4;
}
else
{
y += STEP;
direc = 2;
}
break;
case 2:
if (input[i] == 'V')
{
x -= STEP;
direc = 3;
}
else
{
x += STEP;
direc = 1;
}
break;
case 4:
if (input[i] == 'V')
{
x += STEP;
direc = 1;
}
else
{
x -= STEP;
direc = 3;
}
break;
}
printf("%d %d lineto\n", x, y);
}
printf("stroke\nshowpage\n");
}
return 0;
}