计蒜客——机器人

1.题目描述:

计蒜客——机器人
计蒜客——机器人
计蒜客——机器人
计蒜客——机器人


2.算法分析:

首先我们知道机器人初始状态是在坐标原点,方向是朝右边的。我们也知道在坐标轴上,在排除斜线移动一共就上下左右四种方向移动。
我们看题目可以发现一共有四个指令,
forward
前进指的是在当前方向前进多少单位长度
back
调头再前进是指当前方向相反方向前进多少个单位长度。
left
向左是指当前方向逆时针旋转90度后的方向前进 多少个单位长度
right
向右是指当前方向顺时针旋转90度后的方向前进多少个单位长度。

分析样例输入
初始态:0,0 方向向右
1.首先 back -9
先将机器人方向由向右变为向左,然后前进-9个单位长度,因为向左移动是做减法运算,即0 - (-9),0
2.其次left 3
现在机器人的方向由左逆时针旋转90度变为9 , 0 - 3
打字有点累,写在草稿纸上
图片没修好,加载有点慢
计蒜客——机器人


3.源代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int dir[4] = {0,1,2,3};//表示机器人当前的方向,0表示向上,1表示向下,2表示向左,3表示向右

int main(){
    int n;
    scanf("%d", &n);
    string str;
    int dis;
    string s1 = "back";
    string s2 = "forward";
    string s3 = "left";
    int x1 = 0;
    int y1 = 0;
    int d = dir[3];		//初始时机器人的方向是面向右边
    for (int i = 0 ; i < n ; i++){
       cin >> str;
        cin >> dis;
        if(str.compare(s1) == 0){ //back方式
          if(d == 0){
              d = dir[1];
              y1 -= dis;
          }else if(d == 1){
              d = dir[0];
              y1 += dis;
          }else if(d == 2){
              d = dir[3];
              x1 += dis;
          }else{
              d = dir[2];
              x1 -= dis;
          }
        	
        }else if(str.compare(s2) == 0){//forward方式
             if(d == 0){
              y1 += dis;
          }else if(d == 1){
              y1 -= dis;
          }else if(d == 2){
              x1 -= dis;
          }else{
              x1 += dis;
          }
        }else if(str.compare(s3) == 0){//left方式
            if(d == 0){
              d = dir[2];
              x1 -= dis;
          }else if(d == 1){
              d = dir[3];
              x1 += dis;
          }else if(d == 2){
              d = dir[1];
              y1 -= dis;
          }else{
              d = dir[0];
              y1 += dis;
          }
        }else{  //right方式
              if(d == 0){
              d = dir[3];
              x1 += dis;
          }else if(d == 1){
              d = dir[2];
              x1 -= dis;
          }else if(d == 2){
              d = dir[0];
              y1 += dis;
          }else{
              d = dir[1];
              y1 -= dis;
          }
        }
    }
    printf("%d %d\n",x1,y1);
    return 0;
}

可以通过Blog:http://47.107.118.184 评论任意一篇文章我的邮箱会收到,我会及时回复,大家一起学习。