现在的位置: 首页 > 综合 > 正文

“机器人行走问题”——蓝桥杯java决赛

2014年03月06日 ⁄ 综合 ⁄ 共 2068字 ⁄ 字号 评论关闭

这题虽然不难,但网上有些解法较麻烦,尤其是变向处理上,个人理解后,实现如下:
【编程题】(满分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]);
		}
		
	}

	
}

抱歉!评论已关闭.