这是题目
一队机器人漫游车将被美国宇航局降落在火星高原上。漫游车将在这个奇怪的长方形高原上巡游,以便他们的机载摄像头可以获得周围地形的完整视图,并将其发送回地球。漫游者的坐标和位置由x和y坐标的组合以及代表四个方向(E, S, W, N)的字母表示。高原划分为网格以简化导航。比如位置0,0,N,表示漫游车位于左下角并面向北。为了控制漫游车,美国宇航局发送一串简单的字母。指令字母是’L’,’R’和’M’。 ‘L’和’R’使漫游车分别向左或向右旋转90度,而不会从当前地点移动。 ‘M’表示前进一个网格点,并保持相同的方向。
假设从(x,y)直接向北移动,就到了(x,y + 1)。
INPUT:
第一行输入是平台的右上角坐标,左下角坐标被假定为0,0。
其余的输入是有关已部署的漫游车的信息。每个漫游车都有两行输入。第一行给出了漫游车的位置,第二行是告诉漫游车如何探索高原的一系列指令。位置由两个整数和一个由空格分隔的字母组成,对应于x和y坐标以及漫游车当前的方向。
每个漫游车将按顺序完成,这意味着第二个漫游车在第一个漫游车完成移动之前不会开始移动。
OUTPUT:
每个漫游车的输出应该是其最终的坐标和位置。
输入输出例子
输入:
5 5
1 2 N
LMLMLMLMM
3 3 E
MMRMMRMRRM
预期产出:
1 3 N
5 1 E
这是我的代码
这是mian类
package com.ad.core.main;
import com.ad.core.model.Car;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @program:demo
* @author:aodeng
* @create:2018-08-19 17:04
**/
public class CarMain {
static int Max_X;
static int Max_Y;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//创建车的集合
List<Car> carlist=new ArrayList<Car>();
//输入
System.out.println("****请输入平台的右上角坐标:第一次输入X坐标,第二次输入Y坐标:");
Max_X=sc.nextInt();
Max_Y=sc.nextInt();
System.out.println("平台右上角的坐标为:("+Max_X+","+Max_Y+"),确认请输入:true");
while(sc.next().equals("true")){
System.out.println("请输入车的坐标及方向,东南西北个方向,运动指令(E, S, W, N)的字母表示:");
int x=sc.nextInt();
if(x<0 || x>Max_X){
System.out.println("坐标输入错误");
return;
}
int y=sc.nextInt();
if(y<0 || y>Max_Y){
System.out.println("坐标输入错误");
return;
}
String direction=sc.next();
if(!("E".equals(direction)||"W".equals(direction)||"S".equals(direction)||"N".equals(direction))){
System.out.println("方向输入错误");
}
String url=sc.next();
if("".equals(url) || url.length()<0){
System.out.println("运动路径输入错误");
return;
}
System.out.println("车输入的坐标为:("+x+","+y+"),方向为:"+direction+",运动路径为:"+url);
carRun(x,y,direction,carlist,url);
for (int i=0;i<carlist.size();i++){
System.out.println("x:"+carlist.get(i).getX()+"==y:"+carlist.get(i).getY()+"==方向:"+carlist.get(i).getDirection());
}
System.out.println("*********************继续请输入:true");
}
}
//得到坐标并移动
public static void carRun(int x,int y,String derection,List<Car> carlist,String url){
//创建一个车的对象
Car car=new Car();
car.setX(x);
car.setY(y);
car.setDirection(derection);
for (int i=0;i<url.length();i++){
if("M".equals(String.valueOf(url.charAt(i)))){
car.go();
}
if("L".equals(String.valueOf(url.charAt(i)))){
car.left();
}
if("R".equals(String.valueOf(url.charAt(i)))){
car.right();
}
}
carlist.add(car);
return;
}
}
这是实体类
package com.ad.core.model;
/**
* @program:demo
* @author:aodeng
* @create:2018-08-19 16:56
**/
public class Car {
private int x;
private int y;
private String direction;
private int max_x;
private int max_y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
public int getMax_x() {
return max_x;
}
public void setMax_x(int max_x) {
this.max_x = max_x;
}
public int getMax_y() {
return max_y;
}
public void setMax_y(int max_y) {
this.max_y = max_y;
}
//移动,车的坐标变动,并根据当前车的方向判断移动方向
public void go(){
if("E".equals(this.direction)){
this.x+=1;
}else if("S".equals(this.direction)){
this.y+=-1;
}else if("W".equals(this.direction)){
this.x+=-1;
}else if("N".equals(this.direction)){
this.y+=1;
}
}
//向左转
public void left(){
if("E".equals(this.direction)){
this.direction="N";
}else if("S".equals(this.direction)){
this.direction="E";
}else if("W".equals(this.direction)){
this.direction="S";
}else if("N".equals(this.direction)){
this.direction="W";
}
}
//向右转
public void right(){
if("E".equals(this.direction)){
this.direction="S";
}else if("S".equals(this.direction)){
this.direction="W";
}else if("W".equals(this.direction)){
this.direction="N";
}else if("N".equals(this.direction)){
this.direction="E";
}
}
}
这是运行成功效果图
- 本文链接: https://ilovey.live/archives/yi-ci-mian-shi
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
哈哈哈
那你去面试了没?
@finkey 我就是用这个当的答案,不过估计是我代码太垃圾了吧⌇●﹏●⌇
位置0,0,N,在原文中看起来特别像o,o,N
@shaaoteiman 位置肯定是英文字母缩写啊
Hello,看了这个题目,觉的可以用装饰者模式实现或者用进栈入栈来更好的实现,我用装饰者模式实现了一下,可以参考 https://www.zhoutao123.com/?p=1518 (((┏(; ̄▽ ̄)┛装完逼就跑
@燕归来兮 这个*装得,我给满分,学习了