这道题呢,其实就是个简单模拟,然而出题人把题目写的非常难以理解。
这题大概意思等价于:有个人,它从点(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;
}