机器人行走
时间: 1ms 内存:128M
描述:
某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。例如,我们可以对小车输入如下的指令:15L10R5LRR10R20则,小车先直行15厘米,左转,再走10厘米,再右转,...不难看出,对于此指令串,小车又回到了出发地。你的任务是:编写程序,由用户输入指令,程序输出每条指令执行后小车位置与指令执行前小车位置的直线距离。
输入:
用户先输入一个整数n(n<100),表示接下来将有n条指令。接下来输入n条指令。每条指令只由L、R和数字组成(数字是0~100之间的整数)每条指令的长度不超过256个字符。
输出:
程序则输出n行结果。每条结果表示小车执行相应的指令前后位置的直线距离。要求四舍五入到小数后2位。
示例输入:
5
L100R50R10
3LLL5RR4L12
LL
100R
5L5L5L5
示例输出:
102.96
9.06
0.00
100.00
0.00
提示:
参考答案(内存最优[1112]):
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
char s[270];
int p=0,q=1;
float x=0,y=0;
int main(){
//freopen("f.txt","r",stdin);
int i,j,k;
int n;
scanf("%d",&n);
while(n--){
scanf("%s",s);
p=0,q=1;
x=0,y=0;
for(i=0;s[i]!='\0';){
if(s[i]=='L'){
if(p==0&&q==-1){
p=1,q=0;
}
else if(p==0&&q==1){
p=-1,q=0;
}
else if(p==-1&&q==0){
p=0,q=-1;
}
else if(p==1&&q==0){
p=0,q=1;
}
i++;
}else if(s[i]=='R'){
if(p==0&&q==-1){
p=-1,q=0;
}
else if(p==0&&q==1){
p=1,q=0;
}
else if(p==-1&&q==0){
p=0,q=1;
}
else if(p==1&&q==0){
p=0,q=-1;
}
i++;
}
else if(s[i]>='0'&&s[i]<='9'){
int a[19],j=0;
while(s[i]>='0'&&s[i]<='9'){
a[j++]=s[i]-'0';
i++;
}
float t=0;
for(k=0;k<j;k++){
t=t*10+(float)a[k];
}
if(p==0&&q==-1){
y-=t;
}
else if(p==0&&q==1){
y+=t;
}
else if(p==1&&q==0){
x+=t;
}
else if(p==-1&&q==0){
x-=t;
}
}
}
printf("%.2f\n",sqrt(x*x+y*y));
}
}
参考答案(时间最优[0]):
#include <iostream>
#include <cstring>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
char a[100];
cin>>a;
double endx=0,endy=0;
int i;
double fx=1,fy=0;
double jvli=0;
for(i=0;i<strlen(a);i++)
{
if(a[i]=='R')
{
if(i!=0)
{
endx+=fx*jvli;
endy+=fy*jvli;
jvli=0;
if(fx==0)
{
if(fy==-1)
{
fx=1;
}
else
{
fx=-1;
}
fy=0;
}
else
{
if(fx==-1)
{
fy=-1;
}
else
{
fy=1;
}
fx=0;
}
}
}
else
{
if(a[i]=='L')
{
if(i!=0)
{
endx+=fx*jvli;
endy+=fy*jvli;
jvli=0;
if(fx==0)
{
if(fy==-1)
{
fx=-1;
}
else
{
fx=1;
}
fy=0;
}
else
{
if(fx==-1)
{
fy=1;
}
else
{
fy=-1;
}
fx=0;
}
}
}
else
{
if(i!=0)
{
if(a[i-1]>='0'&&a[i-1]<='9')
{
jvli*=10;
jvli+=a[i]-'0';
}
else
{
jvli+=a[i]-'0';
}
}
else
{
jvli+=a[i]-'0';
}
}
}
}
endx+=fx*jvli;
endy+=fy*jvli;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<sqrt(endx*endx+endy*endy)<<endl;
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。