Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

2012java决赛编程大题

$
0
0


【编程题】(满分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或更高版本。

 

 

package common.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Robot {

	public static void main(String[] args) {

		int x;
		int y;
		String direction;// 初始向右
		List<String> list = new ArrayList<String>();
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		for (int i = 0; i < n; i++)
			list.add(input.next());
		for (int j = 0; j < list.size(); j++) {
			x = 0;
			y = 0;
			direction = "right";
			String inputStr = "";
			String newStr = "";
			inputStr = list.get(j);
			for (int m = 0; m < inputStr.length(); m++) {
				char temp = inputStr.charAt(m);
				if (m != 0 && temp == 'L' || temp == 'R') {
					newStr += "," + temp;
				} else
					newStr += temp;
			}
			String str[] = newStr.split(",");
			for (int k = 0; k < str.length; k++) {
				String arrayStr = str[k];
				String order = "";// 命令
				int value = 0; // 命令值
				if (arrayStr.length() >= 2
						&& (arrayStr.contains("L") || arrayStr.contains("R"))) {
					order = arrayStr.charAt(0) + "";
					value = Integer.parseInt(arrayStr.substring(1));
				}
				if (arrayStr.length() == 1 && arrayStr.equals("L"))
					order = "L";
				if (arrayStr.length() == 1 && arrayStr.equals("R"))
					order = "R";
				if (!arrayStr.contains("L") && !arrayStr.contains("R")) {
					value = Integer.parseInt(arrayStr);
					order = "straight";// 一开始直走
				}
				// --------------
				if (order.equals("straight")) {
					x += value;
					direction = "right";
				}
				// 方向为右-->向左、向右x,y的变化
				else if (order.equals("R") && direction.equals("right")) {
					y -= value;
					direction = "down";
				} else if (order.equals("L") && direction.equals("right")) {
					y += value;
					direction = "up";
				}
				// 方向向上-->向左向右的变化
				else if (order.equals("L") && direction.equals("up")) {
					x -= value;
					direction = "left";
				} else if (order.equals("R") && direction.equals("up")) {
					x += value;
					direction = "right";
				}
				// 方向向下-->向左向右的变化
				else if (order.equals("L") && direction.equals("down")) {
					x += value;
					direction = "right";
				} else if (order.equals("R") && direction.equals("down")) {
					x -= value;
					direction = "left";
				}

				// 方向向左-->向左向右的变化
				else if (order.equals("L") && direction.equals("left")) {
					y -= value;
					direction = "down";
				} else if (order.equals("R") && direction.equals("left")) {
					y += value;
					direction = "up";
				}
			}
			double result = Math.sqrt(x * x + y * y);
			System.out.printf("%.2f", result);
			System.out.println();
		}
	}

}


 

作者:a88Liulei88 发表于2013-3-24 0:33:49 原文链接
阅读:120 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles