某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有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
【注意】
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
static String[] od;
//指令数组public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
// N
Double[] res = new Double[Integer.parseInt(string)];
for (int i = 0;
i < Integer.parseInt(string);
i++) {
ana(scanner.nextLine());
// enter items
res[i] = move();
}
// 格式输出
for (double d : res)
System.out.printf("%.2f\n", d);
}/*
* ;
*
* 根据指令进行移动
*/
static double move() {
int sta = 0;
int i = 0;
// 坐标
int x = 0;
int y = 0;
while (true && i < od.length) {
if (sta == 0) {
if (od[i].equals("L")) {
sta = 1;
} else if (od[i].equals("R")) {
sta = 2;
} else {
y += Integer.parseInt(od[i]);
}
i = i + 1;
}else if (sta == 1) {
if (od[i].equals("L")) {
sta = 3;
} else if (od[i].equals("R")) {
sta = 0;
} else {
x -= Integer.parseInt(od[i]);
}
i = i + 1;
}else if (sta == 2) {
if (od[i].equals("L")) {
sta = 0;
} else if (od[i].equals("R")) {
sta = 3;
} else {
x += Integer.parseInt(od[i]);
}
i = i + 1;
}else if (sta == 3) {
if (od[i].equals("L")) {
sta = 2;
} else if (od[i].equals("R")) {
sta = 1;
} else {
y -= Integer.parseInt(od[i]);
}
i = i + 1;
}
}
return Math.sqrt((x * x + y * y));
}/*
* ;
*
* 分析输入串 将方向和距离分开
*/
static void ana(String string) {
String[] sarr = new String[string.length()];
for (int k = 0;
k < sarr.length;
k++) {
sarr[k] = "";
}
int p = 0;
int i;
int j;
for (i = 0;
i < string.length();
i++) {
if ('0' <= string.charAt(i) && string.charAt(i) <= '9') {
String diString = "";
for (j = i;
j < string.length();
j++) {
if ('0' <= string.charAt(j) && string.charAt(j) <= '9') {
diString += string.charAt(j) + "";
} else {
i = j - 1;
break;
}
}sarr[p++] = diString;
if (j == string.length()) {
break;
}
} else {
sarr[p++] = string.charAt(i) + "";
}
}
List list = new ArrayList();
for (i = 0;
i < sarr.length;
i++) {
if (sarr[i] == "") {
break;
}
list.add(sarr[i]);
// System.out.println(sarr[i]);
}
od = new String[list.size()];
for (i = 0;
i < list.size();
i++) {
od[i] = (String) list.get(i);
}
}
【蓝桥杯|蓝桥杯——机器人行走】
推荐阅读
- 备战蓝桥杯|2020年第十一届蓝桥杯省赛Python组(真题+解析+代码)(跑步锻炼)
- 蓝桥杯|【蓝桥杯】【python】扫地机器人-烂尾楼+1
- 算法|语义分割算法分享之Swin-Transformer
- 卷积|YOLO论文系列笔记(中)
- 算法|Acwing1210. 连号区间数
- 算法|蓝桥云课 最大距离
- 算法|Acwing3173. 缩位求和
- java|mybatis-plus及常用CRUD方法
- 蓝桥杯|蓝桥杯C/C++A组省赛历年真题题解(2013~2021)