机器人行走 某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单, 只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。
2013-04-10 23:08
363 查看
/*机器人行走 * 【编程题】(满分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 */ import java.util.Scanner; public class Demo02 { static int direction = 1; // direction的值 左为0,上为1,右为2,下为3 static int[] X = {-1, 0, 1, 0}; static int[] Y = { 0, 1, 0, -1}; static int x = 0; // 点坐标 x 值 static int y = 0; // 点坐标 y 值 // 输入数据 public static String[] input(int n){ Scanner scan = new Scanner(System.in); String[] ss = new String ; for(int i=0;i<n;i++){ ss[i] = scan.nextLine(); } return ss; } // 计算xy坐标值 public static void countXY(String ss) { if(!ss.equals("")){ int n = Integer.parseInt(ss); x += n * X[direction]; y += n * Y[direction]; } } // 修改方向(direction) public static void alterDirection(char c){ if(c=='L'){ // direction的值 左为0,上为1,右为2,下为3 direction = (direction+3)%4; }else if(c=='R'){ direction = (direction+1)%4; } } // 进入函数操作 public static void f(String s){ String ss=""; // 暂存数字 for(int i=0;i<s.length();i++){ char c = s.charAt(i); if(c>='0'&&c<='9'){ ss += c; // 添加数字 }else { countXY(ss);// 计算xy坐标值 ss = ""; // 清空用过的数字 alterDirection(c); // 修改方向(direction) } } countXY(ss); // for 执行完查看暂存数字是否还有数字,有的话计算最后一次坐标 ss = ""; // 清空用过的数字 } // 计算xy点与原点的距离,并输出 public static void calc(){ System.out.printf("%.2f\n",Math.sqrt(x*x+y*y)); x = 0; // 回归原点 为下次计算用 y = 0; } public static void main(String[] args){ Scanner scan = new Scanner(System.in); String[] s = input(scan.nextInt()); // 输入数据 for(int i=0;i<s.length;i++){ f(s[i]); // 进入函数操作 calc(); // 计算xy点与原点的距离,并输出 } } }运行结果:
5 L100R50R10 3LLL5RR4L12 LL 100R 5L5L5L5 102.96 9.06 0.00 100.00 0.00
相关文章推荐
- 机器人行走( * 某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。 例如,我们)
- 一个只能输入数字的C#控件源码,并且可以限定数值类型,基本满足财务开发
- 给定一个整数数组,两个数字的返回索引将它们加到一个特定的目标中。 您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
- 黑马程序员——通过treeset接受10个键盘输入的不重复数字
- 多个判断一起写(做一个只可以输入数字的文本框,并且可以用BACKSPACE的)
- Js 实现文本框只能输入数字,不可以输入其他字符
- 如何设置Eclipse中的项目使他们访问时不需要输入项目名称可以直接访问
- tomcat 输入ip可以直接访问项目的方法
- EditText怎么控制可以输入0,但不能输入0开头的数字?
- C#中只接受数字输入的控件
- 让textBox只接受半角的数字输入!
- 如何设置可以不用输入用户名和密码,直接进入linux
- 在文本框(TextBox)中只接受数字和小数点的输入----(引自:zyg19800719的专栏)
- 只可以输入数字(包含小数点)
- 使用Ajax.net遇到的问题-使用会话时提示错误"只有在配置文件或 Page 指令中将启用会话状态设置为真时,才可以使用会话状态
- 8.8编写一个程序,显示提供加法、减法、乘法的菜单,该程序只接受菜单提供的选项,程序提示用户输入两个数字......
- Tomcat 输入ip可以直接访问项目
- 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
- oj:写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
- Java程序员从笨鸟到菜鸟之(十八)JSP基本语法与动作指令