zoukankan      html  css  js  c++  java
  • java实现第三届蓝桥杯机器人行走

    机器人行走

    【编程题】(满分18分)

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

    【注意】

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

    请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

    相关的工程文件不要拷入。

    请不要使用package语句。

    源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

    import java.util.Scanner;
    
    
    public class Main {
        public static String Left = "ULDR";
        public static String Right = "URDL";
        
        public double getResult(String A) {
            double r = 0, x = 0, y = 0;
            char way = 'U';
            for(int i = 0;i < A.length();i++) {
                int start = i;
                if(A.charAt(start) >= '0' && A.charAt(start) <= '9') {
                    while(start < A.length() && A.charAt(start) >= '0' && A.charAt(start) <= '9')
                        start++;
                    int num = Integer.valueOf(A.substring(i, start));
                    if(way == 'U')
                        y += num;
                    else if(way == 'L')
                        x -= num;
                    else if(way == 'D')
                        y -= num;
                    else if(way == 'R')
                        x += num;
                    i = start - 1;
                } else {
                    char temp = A.charAt(i);
                    if(temp == 'L') {
                        int p = Left.indexOf(way+"");
                        p = (p + 1) % 4;
                        way = Left.charAt(p);
                    } else if(temp == 'R') {
                        int p = Right.indexOf(way+"");
                        p = (p + 1) % 4;
                        way = Right.charAt(p);
                    }
                }
            }
            r = Math.sqrt(x*x + y*y);
            return r;
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            double[] result = new double[n];
            for(int i = 0;i < n;i++) {
                String A = in.next();
                result[i] = test.getResult(A);
            }
            for(int i = 0;i < n;i++) {
                System.out.printf("%.2f", result[i]);
                System.out.println();
            }
        }
    }
    
  • 相关阅读:
    Linux 文件及目录管理命令基础
    MHA高可用及读写分离
    MySQL的备份和回复
    mysql的主从复制
    MySQL索引管理及执行计划
    [LeetCode]Linked List Cycle II解法学习
    浅谈reverse_iterator的base()函数
    [LeetCode]LRU Cache有个问题,求大神解答【已解决】
    分享一篇不错的博文《写给准备参加秋招的学弟学妹们~一定要来看哦~》
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077136.html
Copyright © 2011-2022 走看看