机器人行走
【程序文件名】robot
【题目描述】 机器人严格按照指令行走,由于是原始装置,因此只能发出以下4种指令:G:向前直走一个单位;L:左转并向前移动一个单位;R:右转并向前移动一个单位;S:停止移动,并关闭机器人。机器人能不区分指令大小写,但对于其他任何指令机器人不作任何处理。 现在机器人打开机器人接受指令,并把它放置(0,0)坐标;默认方向向北(N),问通过接受一系列指令以后,机器人的坐标在哪里?朝向向哪里?(方向东南西北分别用ESWN表示)
【输入格式】
String(长度不限的字符串)
【输出格式】
(x,y),f(机器人的停止坐标,f表示机器人此时所面对的方向,坐标和方向之间有一空格)
【输入输出样例】
【输入】:GRLRRLRRS
【输出】:(2,0),W
【解题思路】:
这题挺简单,个人认为此题需要多多思考,用dx,dy两个数组来判定方向(为了简便代码,不用太多无用判断),每次行走x不变,y加1。
用int f储存方向,0表示上,1表示右,2表示下,3表示左,每次读取到字符串就进行运算(往右+1,往左-1,超过3或小于0就额外判断),每次判断前行就判断f值等于多少,再进行前行。最后判断f,输出字母。
不用想的太复杂,仔细想想就有结果。
【C++代码】:
PS:代码我这里就给你们了,但是不要总抄代码(起码不要养成习惯)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};
int x,y,f;
char st[110000];
int main()
{
scanf("%s",st+1);
int len=strlen(st+1);
x=0;y=0;f=0;
for(int i=1;i<=len;i++)
{
if(st[i]=='G' || st[i]=='g')
{
x=x+dx[f];
y=y+dy[f];
}
else if(st[i]=='L' || st[i]=='l')
{
if(f>0) f--;else f=3;
x=x+dx[f];
y=y+dy[f];
}
else if(st[i]=='R' || st[i]=='r')
{
f++; if(f==4) f=0;
x=x+dx[f];
y=y+dy[f];
}
else if(st[i]=='S' || st[i]=='s')
{
break;
}
}
printf("(%d,%d),",x,y);
if(f==0) printf("N\n");
if(f==1) printf("E\n");
if(f==2) printf("S\n");
if(f==3) printf("W\n");
return 0;
}