“机器人行走问题”——蓝桥杯java决赛
2013-07-06 15:18
169 查看
这题虽然不难,但网上有些解法较麻烦,尤其是变向处理上,个人理解后,实现如下:
【编程题】(满分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或更高版本。
【编程题】(满分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.math.BigDecimal; import java.util.Scanner; public class RobotWalk_03 { int currentDirection = 0 ; int x=0,y=0; int X_old=0,Y_old=0; private void walk(String instruct) { // TODO Auto-generated method stub String distance = ""; for(int i = 0;i<instruct.length();i++) { char c = instruct.charAt(i); if(c=='L'||c=='R') { turn(c); } else { distance+=c; if(i+1<instruct.length()) { char temp = instruct.charAt(i+1); if(temp!='L'&&temp!='R') continue; } straightForward(distance); distance = ""; } } double d= (double)Math.sqrt((double)((x-X_old)*(x-X_old)+(y-Y_old)*(y-Y_old))); BigDecimal b = new BigDecimal(d); b = b.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(b); X_old = x; Y_old = y; } private void straightForward(String distance) { // TODO Auto-generated method stub switch(currentDirection){ case 0:{ x +=Integer.parseInt(distance); break; } case 1:{ y +=Integer.parseInt(distance); break; } case 2:{ x -=Integer.parseInt(distance); break; } case 3:{ y -=Integer.parseInt(distance); break; } } } private void turn(char c) { // TODO Auto-generated method stub if(c=='R') currentDirection=(currentDirection+3)%4; else currentDirection =(currentDirection+1)%4; } public static void main(String[] args) { RobotWalk_03 test = new RobotWalk_03(); String instructs = ""; Scanner scanner = new Scanner(System.in); int num = Integer.parseInt(scanner.nextLine()); while(true) { if(num==0) break; instructs+=scanner.nextLine()+"\n"; num--; } String[] instruct = instructs.split("\n"); for(int i = 0;i<instruct.length;i++) { test.walk(instruct[i]); } } }
相关文章推荐
- 蓝桥杯——机器人行走
- python机器人行走步数问题的解决
- 蓝桥杯——机器人行走
- 蓝桥杯 机器人行走 模拟 类
- 蓝桥杯---机器人行走
- 第三届蓝桥杯软件大赛“机器人行走”参考编程
- 机器人行走问题
- 蓝桥杯 机器人行走
- python -- 机器人行走步数问题
- 蓝桥杯——趣味整数问题一(2017.1.30)
- 蓝桥杯 历届试题 九宫重排 (八数码问题--康托展开去重 + bfs搜索)
- 2017第八届蓝桥杯-K倍区间问题
- 第八届蓝桥杯B组java省赛 日期问题
- 蓝桥杯--正则问题
- 蓝桥杯 —— 石子合并问题 —— Dp
- 蓝桥杯基础练习 2n皇后问题
- 蓝桥杯-入门训练-A+B问题
- 蓝桥杯—算法提高—士兵排队问题
- 【蓝桥杯单片机组】| DS1302(官方驱动)+ 矩阵按键 + 数码管(改,解决数码管跳动的问题)
- PVCBOT【13号A版】探路者--双足行走机器人