java数据结构实现机器人行走

作者:dreamfly2014 时间:2023-12-04 00:44:24 

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

代码:


import java.util.*;

class FuShu
{
public double real;
public double image;

public FuShu()
{
 real = 0;
 image = 0;
}

public FuShu(double r, double i)
{
 real = r;
 image = i;
}

public FuShu dot(FuShu x)
{
 FuShu r = new FuShu();
 r.real = real * x.real - image * x.image;
 r.image = real * x.image + image * x.real;
 return r;
}

public FuShu dot(double r, double i)
{
 FuShu t = new FuShu();
 t.real = real * r - image * i;
 t.image = real * i + image * r;
 return t;
}  
}

class Robot
{
private int x = 0;
private int y = 0;
private FuShu dir = new FuShu(1,0);

public void walk(String s)
{
 int sum = 0;
 for(int i=0; i<s.length(); i++)
 {
  char c = s.charAt(i);
  if(c=='L' || c=='R')
  {
   x += sum * dir.real;
   y += sum * dir.image;
   sum = 0;
   if(c=='L')
    dir = dir.dot(0,1);
   else
    dir = dir.dot(0,-1);

}
  else
   sum = sum * 10 + (c-'0');

}

x += sum * dir.real;
 y += sum * dir.image;  
}

public void show()
{
 double d = Math.sqrt(x*x + y*y);
 System.out.println(x+","+y + " dir: " + dir.real + "," + dir.image + ", d=" + d);
}
}

public class Walk
{
public static void main(String[] args) throws Exception
{
 Robot t = new Robot();
 t.walk("3R4");
 t.show();
}
}

来源:http://blog.csdn.net/u014078192/article/details/23050297

标签:java,机器人
0
投稿

猜你喜欢

  • c#多线程中Lock()关键字的用法小结

    2022-07-08 04:33:27
  • android工程下不能运行java main程序的解决方法

    2023-06-23 21:54:08
  • 不使用他人jar包情况下优雅的进行dubbo调用详解

    2022-04-20 11:43:46
  • Java之Spring注解开发案例详解

    2022-05-23 05:33:02
  • SpringBoot用@Async注解实现异步任务

    2023-08-07 06:36:09
  • Java 多线程并发ReentrantLock

    2022-02-23 11:53:23
  • Android 文件存储及常见问题解决

    2023-07-12 13:25:45
  • Spring整合Quartz实现定时任务调度的方法

    2023-07-07 00:55:55
  • Intelli IDEA安装Scala插件并安装Scala软件和配置环境变量的详细教程

    2023-02-16 23:49:01
  • Java实现分页的前台页面和后台代码

    2021-07-22 17:10:04
  • 深入理解Java设计模式之简单工厂模式

    2023-12-06 07:16:36
  • Unity3D撤回命令开发详解

    2022-01-15 09:26:21
  • 使用自定义注解实现redisson分布式锁

    2021-09-30 18:31:22
  • Android编程之控件ListView使用方法

    2022-08-12 08:50:03
  • OpenXml读写Excel实例代码

    2023-09-10 18:11:22
  • 浅谈Java自动装箱与拆箱及其陷阱

    2023-03-22 23:09:23
  • eclipse端口被占用问题的解决方法

    2022-10-04 07:01:54
  • Flutter模仿实现微信底部导航栏流程详解

    2023-06-21 11:46:12
  • 解决mybatis 中collection嵌套collection引发的bug

    2023-03-20 20:55:39
  • Spring Boot实现文件上传下载

    2021-11-22 21:19:36
  • asp之家 软件编程 m.aspxhome.com