一道初级ACM的题目,求帮助


1、Description
自从小明发明了只能向左转与向右转的机器人以后,热血沸腾的他又给机器人加了一个操作。假设机器人在二维坐标系的原点,一开始面向Y轴正方向(北N),现在给你一个仅由’L’,’R’,’M’的串,其中L表示向左转,R表示向右转,M表示向所面对的方向走一个单位的距离,试问经过操作过后,机器人的坐标和所面对的方向。

北(N),西(W),东(E),南(S)。
Input
第一行输入一个T(T<150),表示任务的个数 。
对于每个任务,输入一个串。(每个任务开始前机器人在原点,面向北(N),既Y轴正方向) 
串长度不大于100 
Output
 对于每个任务,输出两个数表示机器人的坐标,一个字符表示机器人的面朝的方向。
Example
输入   2                                          输出  0 1 S
           LRMLL                                           -1 2 E
           LMRMMLLL


11 个解决方案

#1


模拟。
你把输入的方向或者前进一格一个一个解析出来,一步一步知道处理完所有的步骤不就行了

#2


引用 1 楼 FightForProgrammer 的回复:
模拟。
你把输入的方向或者前进一格一个一个解析出来,一步一步知道处理完所有的步骤不就行了


对的,这个应该用数组吧,可是不知道怎么弄

#3


引用 2 楼 whm546877424 的回复:
Quote: 引用 1 楼 FightForProgrammer 的回复:

模拟。
你把输入的方向或者前进一格一个一个解析出来,一步一步知道处理完所有的步骤不就行了

对的,这个应该用数组吧,可是不知道怎么弄

也可以不用数组吧,你可以用enum direction{北(N),西(W),东(E),南(S)};direction m_dirt 表方向; int X,int Y;表示坐标;
switch(m_dirt)
{
  //在每个北(N),西(W),东(E),南(S)里面分别处理'L','R'字符时设置m_dirt值,'M'字符时根据得到的m_dirt设置int X或int Y加1减1;
 //最后得到的不就是了。这不是最容易想的么?
}

#4



#define COUNT 4
char dirs[COUNT] = {'N', 'E', 'S', 'W'};

void get_coord(char *str, int &x, int &y, char &dir)
{
    x = 0;
    y = 0;
    dir = dirs[0];
    int dir_index = 0;
    int size = strlen(str);

    int i;
    for (i = 0; i < size; i++)
    {
        if ('L' == str[i])
        {
            dir_index--;
            dir_index  = (dir_index >= COUNT) ? (dir_index % COUNT) : dir_index;
            dir_index = (dir_index < 0) ? (dir_index + COUNT) : dir_index;
        }
        else if ('R' == str[i])
        {
            dir_index++;
            dir_index  = (dir_index >= COUNT) ? (dir_index % COUNT) : dir_index;
            dir_index = (dir_index < 0) ? (dir_index + COUNT) : dir_index;
        }
        else if ('M' == str[i])
        {
            switch (dirs[dir_index])
            {
            case 'N':
                y++;
                break;
            case 'E':
                x++;
                break;
            case 'S':
                y--;
                break;
            case 'W':
                x--;
                break;
            default:
                break;
            }
        }
    }

    dir = dirs[dir_index];
}

#5


可以建一个双向循环链表表示“转向”

#6


参考代码链接:
http://tieba.baidu.com/p/3350535618

#7


引用 4 楼 michael2988 的回复:

#define COUNT 4
char dirs[COUNT] = {'N', 'E', 'S', 'W'};

void get_coord(char *str, int &x, int &y, char &dir)
{
    x = 0;
    y = 0;
    dir = dirs[0];
    int dir_index = 0;
    int size = strlen(str);

    int i;
    for (i = 0; i < size; i++)
    {
        if ('L' == str[i])
        {
            dir_index--;
            dir_index  = (dir_index >= COUNT) ? (dir_index % COUNT) : dir_index;
            dir_index = (dir_index < 0) ? (dir_index + COUNT) : dir_index;
        }
        else if ('R' == str[i])
        {
            dir_index++;
            dir_index  = (dir_index >= COUNT) ? (dir_index % COUNT) : dir_index;
            dir_index = (dir_index < 0) ? (dir_index + COUNT) : dir_index;
        }
        else if ('M' == str[i])
        {
            switch (dirs[dir_index])
            {
            case 'N':
                y++;
                break;
            case 'E':
                x++;
                break;
            case 'S':
                y--;
                break;
            case 'W':
                x--;
                break;
            default:
                break;
            }
        }
    }

    dir = dirs[dir_index];
}

这个用的是C++?刚学C语言还不太懂。怎么都没有int main了

#8


函数不认识吗。。。

#9



int main()
{
    int x = 0;
    int y = 0;
    char dir = 'N';
    char str[101] = {0};
    int times = 0;
    scanf("%d", &times);
    if (times <= 0)
    {
        return 1;
    }
    int *px = new int[times];
    int *py = new int[times];
    char *pdir = new char[times];
    int i;
    for (i = 0; i < times; i++)
    {
        x = 0;
        y = 0;
        dir = 'N';
        scanf("%s", str);
        get_coord(str, x, y, dir);
        *(px + i) = x;
        *(py + i) = y;
        *(pdir + i) = dir;
    };

    for (i = 0; i < times; i++)
    {
        printf("%d %d %c\n", *(px + i), *(py + i), *(pdir + i));
    }

    delete []px;
    delete []py;
    delete []pdir;

    return 0;
}

#10



 struct RobotStatus
 {
 int x;
 int y;
 int dir_idx;
 };
void robotControl()
{
string sControl;
cin>>sControl;
int len = sControl.length();
RobotStatus rs;
rs.x = 0;
rs.y = 0;
rs.dir_idx =0;
char FourDirections[4] = {'N','W','S','E'};
for(int i=0;i<len;++i)
{
char chCom = sControl[i];
switch (chCom)
{
case 'L':
rs.dir_idx = (rs.dir_idx+1)%4; 
break;
case 'R':
if(rs.dir_idx==0) rs.dir_idx = 3;
else
rs.dir_idx = rs.dir_idx-1;
break;
case 'M':
switch (rs.dir_idx)
{
case 0:
rs.y++;
break;
case 1:
rs.x--;
break;
case 2:
rs.y--;
break;
case 3:
rs.x++;
break;
default:
break;
}
break;
default:
break;
}

}
cout<<"当前机器人的状态是:"<<endl;
cout<<"x: "<<rs.x<<endl;
cout<<"y: "<<rs.y<<endl;
cout<<"方向: "<<FourDirections[rs.dir_idx]<<endl;
}

#11


#include <stdio.h>

int main()
{
   char input[101]={'\0'},dire='\0',ch;
   int x=0,y=0;
   int i,n,times;
   int j=0;
   int op,dir=0;
   scanf("%d",&times);
   for(i=0;i<=times;i++)
   {
       ch=getchar();
       while(ch!='\0')
       {
           input[j]=ch;
           ch=getchar();
           j++;
       }
       for(n=0;n<=j-1;n++)
       {
           if(input[n]=='L')
           {
             dir--;
           }
           else if(input[n]=='R')
           {
             dir++;
           }
           else if(input[n]=='M')
           {
                if(dir>=0)
                {
                    op=dir%4;
                    switch(op)
                    {
                        case 0:
                            dire='N';break;
                        case 1:
                            dire='E';break;
                        case 2:
                            dire='S';break;
                        case 3:
                            dire='W';break;
                        default:
                            break;
                    }
                }
                else if(dir<0)
                {
                    op=dir&4;
                    switch(op)
                    {
                        case 0:
                            dire='N';break;
                        case -1:
                            dire='W';break;
                        case -2:
                            dire='S';break;
                        case -3:
                            dire='E';break;
                        default:
                            break;

                    }
                }
                    switch(dire)
                    {
                        case 'N':
                            y++;break;
                        case 'S':
                            y--;break;
                        case 'E':
                            x++;break;
                        case 'W':
                            x--;break;
                        default:
                            break;
               }
           }

       }
       printf("%d %d",x,y);
   }
}

你们看看我这个哪里不对了,能够运行的
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告