题意:输入1行命令,由A与V组成,A表示顺时针旋转,V表示逆时针旋转,初始点在(300, 420),先往正东方向走一步到(310, 420),然后开始按输入的命令行走,输出每走一步的坐标。(命令字符串长度小于200)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1033
——>>训练的第一题,第一次看题目,不知所云,放了,今天硬着头皮看了一次,明了,模拟走下去就是。
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 200 + 10;
void moveto(int &x, int &y, char &dir, char turn)
{
switch(dir)
{
case 'E':
{
if(turn == 'A')
{
y -= 10;
dir = 'S';
}
else
{
y += 10;
dir = 'N';
}
break;
}
case 'S':
{
if(turn == 'A')
{
x -= 10;
dir = 'W';
}
else
{
x += 10;
dir = 'E';
}
break;
}
case 'W':
{
if(turn == 'A')
{
y += 10;
dir = 'N';
}
else
{
y -= 10;
dir = 'S';
}
break;
}
case 'N':
{
if(turn == 'A')
{
x += 10;
dir = 'E';
}
else
{
x -= 10;
dir = 'W';
}
break;
}
}
}
int main()
{
char m[maxn];
while(~scanf("%s", m))
{
printf("300 420 moveto\n310 420 lineto\n");
int len = strlen(m), i, x = 310, y = 420;
char dir = 'E';
for(i = 0; i < len; i++)
{
moveto(x, y, dir, m[i]);
printf("%d %d lineto\n", x, y);
}
printf("stroke\nshowpage\n");
}
return 0;
}