2008年中山市小学生信息学邀请赛第一题——机器人行走

机器人行走


【程序文件名】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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值