玉兔号控制程序-程序实现题目
来源:互联网 发布:java算法面试题2017 编辑:程序博客网 时间:2024/04/28 03:03
背景介绍:
2013年12月14日21时11分,嫦娥三号在月球正面的虹湾以东地区着陆。
2013年12月15日凌晨,嫦娥三号搭载的“玉兔”号月球探测器成功与嫦娥三号进行器件分离。
题目:
假设我们是中国国家航天局人员,当玉兔号离开嫦娥三号之后,我们需要能够控制玉兔号在月球上开展探测工作。我们先假定虹湾区是一个很大的平原,我们在虹湾区建立一个坐标轴,如下图:
玉兔号离开嫦娥三号后,根据自身安装的定位系统可以知道自己的初始位置,我们记为 X0 , Y0 ; 同时玉兔号也可以知道当前它的朝向,如东、西、南、北(暂时只考虑这四个方向)。
中国国家航天局会向玉兔号发送指令,我们先暂定为3种:
1.F : 当玉兔号接收到这条指令之后,会向前移动一个坐标单位的距离
2.L : 当玉兔号接受到这条指令之后,会原地向左旋转90度
3.R : 当玉兔号接收到这条指令之后,会原地向右旋转90度
要求:
一)设计一个玉兔号的主程序,能够接收中国国家航天局发送过来的指令序列(如FFLFRFLL),执行该指令序列之后,玉兔号能够走到正确的位置,并知道当前正确的位置。(如:玉兔号初始位置为 (0,0),方向朝东,执行指令 FFLFRFLL之后,位置为 (3,1) 方向朝西)
二)主程序中,不允许出现switch case语句,也不允许出现else关键字,不允许使用三元表达式(? :),if关键字出现的次数要求在5次以下(0-4次)
三)主程序可以用任何语言编写,如Java、C#、Ruby、Python等
四)在所选语言允许的情况下,请编写相应的单元测试
-----------------------------------------------解决方法-------------------------------------------------------------------------------------------------------------
package com.suryani.control;import java.util.Scanner;/** * @author yxianyao * 玉兔探测器简单控制程序. */public class YUTUControl{ public static void main(String args[]){ System.out.println("请输入操作的指令(F,L,R输入的指令为EXIT退出.)"); //读取输入的操作指令 Scanner reader = new Scanner(System.in); //操作指令字符串 String controlOrder = ""; //判断是否输入命令 while(reader.hasNext()&&!"EXIT".equals(controlOrder=reader.nextLine())){ //把输入的字符串转化成字符数组. char[] controlOrderArr=controlOrder.toCharArray(); //创建玉兔对象 YUTU yutu = new YUTU(); //根据输入的命令执行操作. yutu.Move(controlOrderArr); System.out.println("请输入操作的指令(F,L,R输入的指令为EXIT退出.)"); } } }/** * @author yxy * 玉兔对象 */class YUTU{ //玉兔的移动方向按照方向的顺时针设定方向数组。 public String[] direction={"东","南","西","北"}; public int[] directiInt = {1,-1,-1,1}; //玉兔的移动方向索引 ,默认初始是东。 private int directionIndex = 0; //玉免所处的坐轴初始位置为(0,0); private int x=0,y=0; //设置索引 public int getDirectionIndex() { return directionIndex; } //获取索引 public void setDirectionIndex(int directionIndex) { this.directionIndex = directionIndex; } /** * @param orders 指令字符数组. * 根据输入的指令字符数组执行操作. */ public void Move(char[] orders){ for(char order: orders){ if('F'==order){ //F : 当玉兔号接收到这条指令之后,会向前移动一个坐标单位的距离 System.out.format("当玉兔号接收到这条指令之后,向%s移动一个坐标单位的距离。\n", direction[directionIndex]); //判断索引,来判断是要进行加减. if(directionIndex%2==0){ //索引是偶数,就是对x轴的操作,加减根据索引指向数组进行判断是加,是减. //执行完成跳出当前的循环. x=x+(directiInt[directionIndex]*1); continue; } //索引是奇数,就不用进入判断.直接执行对y轴的操作 y=y+(directiInt[directionIndex]*1); } if('L'==order){ //L : 当玉兔号接受到这条指令之后,会原地向左旋转90度 directionIndex--; } if('R'==order){ //R : 当玉兔号接收到这条指令之后,会原地向右旋转90度 directionIndex++; } //计算出符合要求的索引范围 directionIndex=(directionIndex%4+4)%4; System.out.format("当玉兔号接收到这条指令旋转之后,现在的%s方向\n", direction[directionIndex]); } System.out.format("操作指令运行完成后的坐标是:(%d,%d)\n",x,y); }}
- 玉兔号控制程序-程序实现题目
- 软件工程师笔试题-玉兔号控制程序
- 玉兔号月球车?
- 玉兔号苏醒了
- 泰戈尔玉兔
- KC伺服舵机带参控制程序程序
- 用VC++实现控制程序运行一实例
- C++构造函数简单实现电梯控制程序
- 玉兔即时通信
- 烟台玉兔面试总结
- 攻击玉兔小游戏
- C 语言编写windows服务程序的控制程序
- ARM裸机程序开发10(LED控制程序)
- 程序题目
- 在VC++实现控制程序只运行唯一一个实例
- AVR+FPGA实现六路闭环电流控制程序
- 基于FPGA的DS18B20控制程序设计及其Verilog实现 (一)
- 基于FPGA的DS18B20控制程序设计及其Verilog实现(三)
- android 增量更新之客户端
- 写在这一天
- java web开发 处理高并发的方案
- 职场沟股定理
- Hibernate @OneToOne懒加载实现解决方案
- 玉兔号控制程序-程序实现题目
- mysql 和sql server的区别1---top和limit
- 注册机和补丁
- 那些年我追过的android
- 手动滑动的进度条 SeekBar
- 【matlab】频域滤波函数dftuv
- 一个简单WEBSERVICE应用的开发、部署、及各部分意义
- SVN服务器搭建和使用(一)
- 解决Gridview中出现rules="all"