引用
火星探测器 一小队机器人探测器将由NASA送上火星高原,探测器将在这个奇特的矩形高原上行驶。 用它们携带的照相机将周围的全景地势图发回到地球。每个探测器的方向和位置将由一个x,y系坐标图和一个表示地理方向的字母表示出来。为了方便导航,平原将被划分为网格状。位置坐标示例:0,0,N,表示探测器在坐标图的左下角,且面朝北方。为控制探测器,NASA会传送一串简单的字母。可能传送的字母为:'L','R'和'M'。 'L',和'R'分别表示使探测器向左、向右旋转90度,但不离开他所在地点。'M' 表示向前开进一个网格的距离,且保持方向不变。假设以广场(高原)的直北方向为y轴的指向。 输入:首先输入的line是坐标图的右上方,假定左下方顶点的坐标为0,0。剩下的要输入的是被分布好的探测器的信息。每个探测器需要输入wo lines。第一条line 提供探测器的位置,第二条是关于这个探测器怎样进行高原探测的一系列说明。位置是由两个整数和一个区分方向的字母组成,对应了探测器的(x,y)坐标和方向。每个探测器的移动将按序完成,即后一个探测器不能在前一个探测器完成移动之前开始移动。 输出:每个探测器的输出应该为它行进到的最终位置坐标和方向。输入和输出 测试如下: 期待的输入:5 5 1 2 N LMLMLMLMM 3 3 E MMRMMRMRRM 期待的输出 1 3 N 5 1 E
Action.java:
public interface Action {
public String getOutput(InputStream input);
}
ActionImpl.java:
public class ActionImpl implements Action {
//the width and the height of each grid
private int grid_width = 1;
private int grid_height = 1;
//the max width and the max height of the whole grids
private int max_grid_width;
private int max_grid_height;
//the min width and the max height of the whole grids
private int min_grid_width;
private int min_grid_height;
private String output;
public ActionImpl(){
}
public ActionImpl(int min_grid_width, int min_grid_height){
this.min_grid_height = min_grid_height;
this.min_grid_width = min_grid_width;
}
public ActionImpl(int... args) throws Exception{
if(args.length == 4){
this.max_grid_width = args[0];
this.max_grid_height = args[1];
this.min_grid_width = args[2];
this.min_grid_height = args[3];
}else{
throw new Exception("There is not enough args");
}
}
public String getOutput(InputStream input){
List<String> input_divided = devideInput(input);
if(Integer.parseInt(input_divided.get(0).toString())<=this.min_grid_height
|| Integer.parseInt(input_divided.get(1).toString())<=this.min_grid_width){
try {
throw new Exception("you entered the uncorrect args");
} catch (Exception e) {
e.printStackTrace();
}
}
this.max_grid_height = Integer.parseInt(input_divided.get(0).toString());
this.max_grid_width = Integer.parseInt(input_divided.get(1).toString());
List<Robot> robots = new ArrayList<Robot>();
try {
robots = generateRobots(robots, input_divided);
} catch (Exception e) {
e.printStackTrace();
}
this.output = "";
for(int i=0;i<robots.size();i++){
try {
this.output += explore((Robot) robots.get(i)) + " ";
} catch (Exception e) {
e.printStackTrace();
}
}
return this.output.trim();
}
private List<Robot> generateRobots(List<Robot> robots, List<String> input_divided) throws Exception{
for(int i=2;i<input_divided.size();i=i+4){
Robot robot = new Robot();
robot.setX(Integer.parseInt(input_divided.get(i).toString()));
robot.setY(Integer.parseInt(input_divided.get(i+1).toString()));
isBeyondTheMark(robot);
robot.setDirection(input_divided.get(i+2).toString().charAt(0));
robot.setAction(input_divided.get(i+3).toString());
robots.add(robot);
}
return robots;
}
private List<String> devideInput(InputStream input){
Scanner scan = new Scanner(input);
List<String> input_divided = new ArrayList<String>();
while(scan.hasNext()){
String each_input = scan.next();
if(each_input=="stop"||each_input.equals("stop")){
break;
}
input_divided.add(each_input);
}
return input_divided;
}
private String explore(Robot robot) throws Exception{
char[] action = robot.getAction().toCharArray();
for(int i=0;i<action.length;i++){
switch(action[i]){
case 'L':
turn(robot, 'L');
break;
case 'R':
turn(robot, 'R');
break;
case 'M':
turn(robot, 'M');
break;
}
}
return robot.getX() + " " + robot.getY() + " " + robot.getDirection();
}
private void turn(Robot robot, char direction) throws Exception{
if(direction == 'L'){
for(int j=0;j<Robot.directions.length;j++){
if(robot.getDirection()==Robot.directions[j]){
if(j==0){
robot.setDirection(Robot.directions[3]);
}else{
robot.setDirection(Robot.directions[j-1]);
}
break;
}
}
}else if(direction == 'R'){
for(int j=0;j<Robot.directions.length;j++){
if(robot.getDirection()==Robot.directions[j]){
if(j==3){
robot.setDirection(Robot.directions[0]);
}else{
robot.setDirection(Robot.directions[j+1]);
}
break;
}
}
}else if(direction == 'M'){
if(robot.getDirection()==Robot.directions[0]){
robot.setY(robot.getY()+1);
}else if(robot.getDirection()==Robot.directions[1]){
robot.setX(robot.getX()+1);
}else if(robot.getDirection()==Robot.directions[2]){
robot.setY(robot.getY()-1);
}else if(robot.getDirection()==Robot.directions[3]){
robot.setX(robot.getX()-1);
}
}
isBeyondTheMark(robot);
}
private void isBeyondTheMark(Robot robot) throws Exception{
if(robot.getX()>this.max_grid_height||robot.getY()>this.max_grid_width
||robot.getX()<this.min_grid_height||robot.getY()<this.min_grid_width){
throw new Exception("beyond the mark");
}
}
public String getOutput() {
return output;
}
public void setOutput(String output) {
this.output = output;
}
}
Robot.java:
public class Robot {
public static final char[] directions = {'N', 'E', 'S', 'W'};
// the position of the robotic rover
private int x;
private int y;
private char direction;
private String action;
}
Main.java:
public class Main {
public static void main(String[] args) {
Action action = new ActionImpl();
String output = action.getOutput(System.in);
System.out.println(output);
}
}
分享到:
相关推荐
5. **多样性与创新性**:试题形式多样,既有传统题型,也有新颖独特的题目,旨在激发学生的学习兴趣,如例题中关于火星探测器的问题,就是一个将前沿科技与物理知识相结合的创新设计。 总的来说,物理中考的试题...
待发射或着陆在地表的探测器不属于天体,而是在宇宙空间运行的探测器才符合这一定义。因此,2018年12月20日在宇宙中的“嫦娥四号”探测器是天体。 2. 月球的自转和公转周期:月球的自转和公转周期相同,均为27.32天...
各国都在准备各自的火星探测计划,中国也将首次进行地外行星探索,旨在一次性实现“绕”、“落”、“巡”三个目标,即火星轨道器的环绕、着陆器的降落和火星车的巡视。 2. 《火星科学概论》:这本书是中国首部系统...
为此,2004年,NASA发射了两个名为"精神"和"机遇"的火星探测器,这两个机器人漫游者被设计用来在火星表面移动,穿越岩石和各种崎岖地形,并且它们装备了相机,能够拍摄图像并将其传回地球。 在火星上,"精神"和...
2. 火星探测器的任务:火星探测器的主要任务包括环绕火星进行遥感观测、着陆并进行表面探测,收集地质、气候、可能的生命痕迹等相关数据,以及测试未来可能的登陆和返回技术。 【知识点三:地球在太阳系的位置】 ...
2. **火星相关知识**:试题提到了我国火星探测器的计划,以及火星的“左邻右舍”,这涉及到太阳系行星的排列顺序,即火星位于地球和木星之间。 3. **火星液态水**:提到火星表面存在液态水的证据,这是关于火星可能...
在上述试题中,探测器受到月球引力的作用进行轨道运动,这正是万有引力定律的应用。探测器在离月面4米高处悬停,意味着其在这一高度受到的月球引力等于其向上的推力,以保持平衡。 2. **天体运动与航天**:试题中...
1. 天体探索部分,试题讨论了2020年火星探测器的发射,强调了7月是发射火星探测器的理想时期,可能是因为此时地球与火星的距离相对较近,节省能源。 2. 地球与火星对比分析,涉及火星的大气密度、昼夜温差、季节...
1. 地理试题与天文学的结合:题目涉及了天文事件,即“天问一号”火星探测器的发射。这涉及到天文学中的天体运动规律,特别是地球和火星在太阳系中的相对位置,以及地球自转对观察时间的影响。 2. 时间和地理位置的...
- 火星探测:2020年我国计划发射火星探测器,目标是一次性实现环绕、着陆、巡视三个任务,这是火星探测的重要里程碑。 2. **天体环境**: - 火星上的液态水:2015年NASA发现火星存在液态水活动的证据,这对寻找...
- 火星探测器的速度限制:根据开普勒第三定律和牛顿运动定律,火星探测器的最大环绕速度与地球的第一宇宙速度有关,但不会等于地球的第一宇宙速度。 6. 天体物理学: - 火星探测涉及到天体运动和宇宙速度,需要...
- 提到的"天问一号"是中国的火星探测任务,这里测试了学生对航天技术、火星环境和探测器适应性方面的理解。火星的平均温度、大气成分、大气层厚度等信息都是地理学中的行星环境知识。 4. 太空探索的挑战: - ...
9. 科学知识:文章中提及的火星探索历史,如1877年斯基帕雷利的观测、1962年苏联的火星探测器"火星1号"以及后续的火星探索活动,展示了人类对火星持续不断的科学研究和探索历程。 综上所述,这份练习涵盖了语文基础...
为了搜索火星,中国计划在大约2020年左右发射一个火星探测器。这个探测器将降落在火星上,并带回火星上的样本。 5. 文章主要讲述了什么内容? 文章主要讲述了中国航天的历史和发展,包括早期的火箭尝试、中国航天...
第七题涉及天问一号火星探测器的轨道问题,比较了天问一号与地球、火星的公转速度和加速度。第八题通过平抛运动求解速度比例,第九题分析了物体在拉力作用下运动的功率和功的问题。第十题讨论了篮球斜上抛后撞击墙面...
5. **火星探测器的运动学**:“天问一号”探测器在火星轨道上的运动受到火星引力的影响。根据牛顿万有引力定律和向心力公式,探测器的加速度和周期可以计算。已知火星的重力加速度和半径,以及探测器的轨道半径,...
2. 火星探测任务:2021年5月15日,我国天问一号探测器成功着陆火星,开始了火星车巡视探测。 3. 火星车能源推测:由于火星表面风大,可推测火星车主要使用风能或太阳能作为能源。 二、关于海洋知识与海洋资源开发的...
1. 火星探测:试题中提到的“萤火一号”是中国首个火星探测器,其任务是研究太阳风与火星磁场的关系。火星是太阳系内离地球较近的行星,位于地球和木星之间,具有固态表面,但并不发光,其表面平均温度低于地球。 2...
总结:本题涉及了地球公转速度的变化、火星探测的科学挑战、太阳活动对通信的影响、奥运会地理分布以及地球上的日出日落规律等多个地理知识点。通过分析这些内容,我们可以了解到地球的天文特征、行星探测的难点以及...
4. 能量转换:火星探测器“天问一号”的能源系统利用了光电转换和物质相变储存能量,展示了能量转换的不同形式,包括光能到电能以及化学能的储存和释放。 5. 物质结构:试题包含对化学用语和模型的理解,如结构式、...