蓝桥杯 机器人行走

 标题:机器人行走

    某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有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

算法:模拟    / /  所以代码这么长 : ( 
注意的地方:会变向(这点和poj 3083挺像的,但是那道题目难度要大得多)


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


int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int x=0,y=0,dct=1;
        char str[500]= {0};
        cin>>str;
        ;
        char a[4]= {0};
        int cnt1=0,cnt2=0;
        for(int i=0,j=0; i<strlen(str); i++)
        {


            if(str[i]=='L')
            {
                cnt1++;
            }
            else
            {
                if(str[i]=='R')
                {
                    cnt2++;
                }
                else
                {
                    a[j++]=str[i];
                    if(str[i+1]=='L'||str[i+1]=='R'||str[i+1]==0)
                    {
                        if(dct==1)
                        {
                            if(cnt1>cnt2)
                            {
                                cnt1-=cnt2;
                                if(cnt1%4==0) y+=atoi(a);
                                if((cnt1-1)%4==0) {x-=atoi(a);dct=2;}
                                if((cnt1-2)%4==0) {y-=atoi(a);dct=3;}
                                if((cnt1-3)%4==0) {x+=atoi(a);dct=4;}
                                cnt2=cnt1=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                            else
                            {
                                cnt2-=cnt1;
                                if(cnt2%4==0) y+=atoi(a);
                                if((cnt2-1)%4==0) {x+=atoi(a);dct=4;}
                                if((cnt2-2)%4==0) {y-=atoi(a);dct=3;}
                                if((cnt2-3)%4==0) {x-=atoi(a);dct=2;}
                                cnt1=cnt2=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                        }
                        if(dct==2)
                        {
                            if(cnt1>cnt2)
                            {
                                cnt1-=cnt2;
                                if(cnt1%4==0) x-=atoi(a);
                                if((cnt1-1)%4==0) {y-=atoi(a);dct=3;}
                                if((cnt1-2)%4==0) {x+=atoi(a);dct=4;}
                                if((cnt1-3)%4==0) {y+=atoi(a);dct=1;}
                                cnt2=cnt1=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                            else
                            {
                                cnt2-=cnt1;
                                if(cnt2%4==0) x-=atoi(a);
                                if((cnt2-1)%4==0) {y+=atoi(a);dct=1;}
                                if((cnt2-2)%4==0) {x+=atoi(a);dct=4;}
                                if((cnt2-3)%4==0) {y-=atoi(a);dct=3;}
                                cnt1=cnt2=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                        }
                        if(dct==3)
                        {
                            if(cnt1>cnt2)
                            {
                                cnt1-=cnt2;
                                if(cnt1%4==0) y-=atoi(a);
                                if((cnt1-1)%4==0) {x+=atoi(a);dct=4;}
                                if((cnt1-2)%4==0) {y+=atoi(a);dct=1;}
                                if((cnt1-3)%4==0) {x-=atoi(a);dct=2;}
                                cnt2=cnt1=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                            else
                            {
                                cnt2-=cnt1;
                                if(cnt2%4==0) y-=atoi(a);
                                if((cnt2-1)%4==0) {x-=atoi(a);dct=2;}
                                if((cnt2-2)%4==0) {y+=atoi(a);dct=1;}
                                if((cnt2-3)%4==0) {x+=atoi(a);dct=4;}
                                cnt1=cnt2=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                        }
                        if(dct==4)
                        {
                            if(cnt1>cnt2)
                            {
                                cnt1-=cnt2;
                                if(cnt1%4==0) x+=atoi(a);
                                if((cnt1-1)%4==0) {y+=atoi(a);dct=1;}
                                if((cnt1-2)%4==0) {x-=atoi(a);dct=2;}
                                if((cnt1-3)%4==0) {y-=atoi(a);dct=3;}
                                cnt2=cnt1=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                            else
                            {
                                cnt2-=cnt1;
                                if(cnt2%4==0) x+=atoi(a);
                                if((cnt2-1)%4==0) {y-=atoi(a);dct=3;}
                                if((cnt2-2)%4==0) {x-=atoi(a);dct=2;}
                                if((cnt2-3)%4==0) {y+=atoi(a);dct=1;}
                                cnt1=cnt2=j=0;
                                memset(a,0,sizeof(a));
                                continue;
                            }
                        }
                    }
                }
            }
        }
        ;
        printf("%.2f\n",sqrt(x*x+y*y));
    }


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值