注解
1、模拟题。
2、难点在于四个方向的表示和移动。用数组表示,代码简洁清晰。先找出来下一步的方向,然后在对应的X和Y矩阵上进行坐标的变化。对应代码:
int new_dir;
if(c=='A'){
new_dir = dir_A[cur_dir];
}
else{
new_dir = dir_V[cur_dir];
}
X += dx[new_dir];
Y += dy[new_dir];
cur_dir = new_dir;
3、此题题意比较难理解,用中文简单叙述就是:V表示向左走,A表示向右走。重点关注人的朝向(上下左右四个方向)。朝向不同,走的方向也不同。每次走10个单位长度的距离。
代码
#include <iostream>
using namespace std;
//four directions: up=0, right=1, down=2, left=3
const int U=0,R=1,D=2,L=3;
int dir_A[] = {R, D, L, U};
int dir_V[] = {L, U, R, D};
int dx[] = {0, 10, 0, -10};
int dy[] = {10, 0, -10, 0};
int main() {
string s;
while(cin>>s) {
cout<<"300 420 moveto"<<endl;
cout<<"310 420 lineto"<<endl;
int cur_dir = 1;
int X = 310;
int Y = 420;
for(int i=0; i<s.length(); i++){
char c = s.at(i);
int new_dir;
if(c=='A'){
new_dir = dir_A[cur_dir];
}
else{
new_dir = dir_V[cur_dir];
}
X += dx[new_dir];
Y += dy[new_dir];
cur_dir = new_dir;
cout<<X<<" "<<Y<<" lineto"<<endl;
}
cout<<"stroke"<<endl;
cout<<"showpage"<<endl;
}
return 0;
}