第三届蓝桥杯Java高职组决赛第三题
2013-07-03 16:15
246 查看
题目描述: 某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有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
分析:字符串处理,先将输入的字符串处理,字母和数字分开,然后模拟小车的动作,起点设为(0,0),终点设为(x,y)。然后4个方向,上左下右四个方向分别对应y+距离,x-距离,y-距离,x+距离。最后sqrt(x*x+y*y)得到结果,最后格式化输出保存两位小数【System.out.print("%.2f",结果);】
代码:import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class test_2 {public static int x=0;public static int y=0;//处理输入字符串,将不同命令放到List中public static List<String> dispose(String str){List<String> list = new ArrayList<String>();String st = "";for(int i=0;i<str.length();i++){if(str.charAt(i)=='L' || str.charAt(i)=='R'){list.add(""+str.charAt(i));continue;}if(str.charAt(i)<='9' && str.charAt(i)>='0'){if(i+1<str.length() && (str.charAt(i+1)<='9' && str.charAt(i+1)>='0')){st+=""+str.charAt(i);}else{st+=""+str.charAt(i);list.add(st);st="";}}}return list;}public static void change(List<String> list){//1上,2左,3下,4右,默认是向前int direction = 1;for(String st:list){if(st.equals("L")){direction=direction%4+1;}else if(st.equals("R")){if(direction-1 == 0)direction=4;elsedirection--;}else{move(direction,Integer.parseInt(st));}}}public static void move(int direction,int distance){switch (direction) {case 1:y+=distance;break;case 2:x-=distance;break;case 3:y-=distance;break;case 4:x+=distance;break;}}public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);int n = scanner.nextInt();for(int i=0;i<n;i++){x=0;y=0;String st = scanner.next();change(dispose(st));System.out.printf("%.2f",Math.sqrt(x*x+y*y));}scanner.close();}}
相关文章推荐
- 第三届蓝桥杯Java高职组决赛第三题
- 第三届蓝桥杯Java高职组决赛第一题
- [蓝桥杯]第三届Java高职组决赛第四题
- 第三届蓝桥杯Java高职组决赛第一题
- 算法笔记_202:第三届蓝桥杯软件类决赛真题(Java高职)
- 第三届蓝桥杯Java高职组决赛第四题
- 蓝桥杯java第七届决赛第三题--打靶
- 第七届蓝桥杯决赛JavaA组第三题_棋子换位
- 2015蓝桥杯决赛Java A组 第三题--显示二叉树
- 蓝桥杯java第三届决赛第一题--星期日
- 第三届蓝桥杯java决赛试题答案
- 第三届蓝桥杯预赛真题 Java高职第九题-- 密码发生器
- 第七届蓝桥杯决赛JavaB组第三题_打靶
- 蓝桥杯java第三届决赛第四题--DNA比对
- 第三届蓝桥杯预赛java组第三题
- 算法笔记_201:第三届蓝桥杯软件类决赛真题(Java本科)
- 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
- 蓝桥杯_第三届_决赛_C语言高职组_1
- 2012第三届蓝桥杯C本科决赛 第三题 常用汉字首字母
- 蓝桥杯_第三届_决赛_C语言高职组_2