蓝桥杯_机器人行走java

题目描述

某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有 3 种:左转(记为 L),右转(记为 R),向前走若干厘米(直接记数字)。

例如,我们可以对小车输入如下的指令:

15L10R5LRR10R20

则,小车先直行 15 厘米,左转,再走 10 厘米,再右转,⋯⋯

不难看出,对于此指令串,小车又回到了出发地。

你的任务是:编写程序,由用户输入指令,程序输出每条指令执行后小车位置与指令执行前小车位置的直线距离。

输入描述

用户先输入一个整数 nn<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

运行限制

  • 最大运行时间:1s

  • 最大运行内存: 256M

代码

package text;

import java.util.Scanner;

public class 机器人行走 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            int x = 0, y = 0;
            int dir = 0;// 上右下左
            String s = scanner.next();
            int step = 0;
            for (int j = 0; j < s.length(); j++) {
                char temp = s.charAt(j);
                if (temp == 'L') {
                    dir = (dir - 1 + 4) % 4;
                } else if (temp == 'R') {
                    dir = (dir + 1 + 4) % 4;
                } else {
                    step = step * 10 + temp - '0';
                    if (j + 1 == s.length() || s.charAt(j + 1) < '0' || s.charAt(j + 1) > '9') {
                        if (dir == 0) {
                            y += step;
                        } else if (dir == 1) {
                            x += step;
                        } else if (dir == 2) {
                            y -= step;
                        } else if (dir == 3) {
                            x -= step;
                        }
                        step = 0;
                    }
                }
            }
            double distance = Math.sqrt(x * x + y * y);
            //四舍五入保留两位小数
            System.out.printf("%.2f\n", distance);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值