第一次发表博客,不喜勿喷,如有不足或错误,欢迎指出。
下面是这道笔试题:
假设我们是中国国家航天局人员,当玉兔号离开嫦娥三号之后,我们需要能够控制玉兔号在月球上开展探测工作。我们先假定虹湾区是一个很大的平原,我们在虹湾区建立一个坐标轴,如下图(附件):
玉兔号离开嫦娥三号后,根据自身安装的定位系统可以知道自己的初始位置,我们记为 X0 , Y0 ; 同时玉兔号也可以知道当前它的朝向,如东、西、南、北(暂时只考虑这四个方向)。
中国国家航天局会向玉兔号发送指令,我们先暂定为3种:
1. F : 当玉兔号接收到这条指令之后,会向前移动一个坐标单位的距离
2. L : 当玉兔号接受到这条指令之后,会原地向左旋转90度
3. R : 当玉兔号接收到这条指令之后,会原地向右旋转90度
要求:
一:设计一个玉兔号的主程序,能够接收中国国家航天局发送过来的指令序列(如FFLFRFLL),执行该指令序列之后,玉兔号能够走到正确的位置,并知道当前正确的位置。(如:玉兔号初始位置为 (0,0),方向朝东,执行指令 FFLFRFLL之后,位置为 (3,1) 方向朝西)。
二:主程序中,不允许出现switch case语句,也不允许出现else关键字,也不允许使用三元表达式,if关键字出现的次数要求在5次以下(0-4次)。
下面是我的解决方案:
import java.util.Scanner; public class Template { public static Scanner in = new Scanner(System.in); // 0:X轴,1:Y轴 public int $xy = 0; // 0:正方向,1:负方向 public int $JJ = 0; // $x:x坐标,$y:y坐标 public int $x = 0, $y = 0; // 方向 public String orientation = "东"; public boolean X_jia() { $x += 1; return true; } public boolean X_jian() { $x -= 1; return true; } public boolean Y_jia() { $y += 1; return true; } public boolean Y_jian() { $y -= 1; return true; } public boolean setToX_jia() { $xy = 0; $JJ = 0; orientation = "东"; return true; } public boolean setToX_jian() { $xy = 0; $JJ = 1; orientation = "西"; return true; } public boolean setToY_jia() { $xy = 1; $JJ = 0; orientation = "北"; return true; } public boolean setToY_jian() { $xy = 1; $JJ = 1; orientation = "南"; return true; } public void execute() { System.out.println("请输入指令(F/L/R):"); String cmd = in.nextLine(); char[] cmds = cmd.toCharArray(); for (char c : cmds) { if ( (c == 'F' && $xy == 0 && $JJ == 0 && X_jia() ) || (c == 'F' && $xy == 1 && $JJ == 0 && Y_jia() ) || (c == 'F' && $xy == 0 && $JJ == 1 && X_jian()) || (c == 'F' && $xy == 1 && $JJ == 1 && Y_jian()) || (c == 'R' && $xy == 0 && $JJ == 0 && setToY_jian()) || (c == 'R' && $xy == 1 && $JJ == 0 && setToX_jia() ) || (c == 'R' && $xy == 0 && $JJ == 1 && setToY_jia() ) || (c == 'R' && $xy == 1 && $JJ == 1 && setToX_jian()) || (c == 'L' && $xy == 0 && $JJ == 0 && setToY_jia() ) || (c == 'L' && $xy == 1 && $JJ == 0 && setToX_jian()) || (c == 'L' && $xy == 0 && $JJ == 1 && setToY_jian()) || (c == 'L' && $xy == 1 && $JJ == 1 && setToX_jia())) { } } System.out.println("坐标:(" + $x + "," + $y + ")"); System.out.println("方向:" + orientation); } public static void main(String[] args) { new Template().execute(); } }
有的人看到if的条件里面这么多逻辑运算符可能就眼花了,其实这里是利用boolean类型和逻辑运算符来实现运算和判断的,这里外层的逻辑或‘||’是衔接每种可能出现的情况,因为逻辑运算符都有短路的情况,逻辑或‘||’是条件一旦符合了就不再继续判断同层的条件,可以理解为一个括号内的条件,所以内层用的是逻辑与‘&&’运算符,每一种情况必须满足括号内的所有条件才能使得这种情况成立,然后整个判断将是返回true。这样运算完全满足题意,当然也会有点难读懂。这段代码也有很多地方没处理,主要是写了这个逻辑过程,请不要在意这些细节。
相关推荐
【程序员笔试常见简答题】是针对求职者准备的笔试题集合,涵盖了算法、数据结构、逻辑推理等多个方面。以下是对这些题目所涉及知识点的详细解释: 1. **矩阵旋转填充**:这是一个典型的矩阵操作问题,涉及到数组的...
笔试部分不仅测试你的理论知识,还考察阅读理解、问题分析和逻辑推理能力。答题时,注意审题清晰,思路条理,用简洁明了的语言表达自己的观点。对于选择题,可以采用排除法、对比法等策略来提高答题准确率。 通过...
《C/C++编程笔试题详解:200页精华文档》 C/C++语言作为计算机科学的基础,一直是软件开发领域的重要工具。这份200页的doc文档包含了丰富的C语言笔试题,旨在帮助学习者巩固基础知识,提升编程技能。虽然其中部分...
1. **C语言基础知识**:包括变量、数据类型(如int、char、float等)、运算符(算术、关系、逻辑、赋值等)、流程控制(if-else、switch、for、while等)。 2. **函数的使用**:理解函数定义、调用,参数传递,局部...
Java二级全国计算机等级考试是针对...同时,对每一道试题进行深入理解和分析,找出错误并及时纠正,是提高成绩的关键。此外,理论学习与实践编程相结合,通过编写小程序来巩固所学知识,也是提升编程能力的有效方式。
2. **运算符与表达式**:熟悉C语言的各种运算符,如算术运算符、关系运算符、逻辑运算符、赋值运算符等,理解运算符的优先级和结合性,能够正确地编写和解析表达式。 3. **控制结构**:掌握条件语句(if-else)、...
每一道真题都是一次检验自我学习成果的机会,通过答案分析错误,找出知识盲点,进行针对性复习。 总的来说,这个压缩包提供的资源是备考二级C语言考试的宝贵资料,考生应充分利用这些真题,结合教材深入学习,提高...
1. **基础语法**:包括变量定义、数据类型(如int、char、float等)、运算符(算术、关系、逻辑、位操作等)、流程控制(if-else、switch、for、while等)。 2. **函数**:理解函数的作用、参数传递、函数指针、...
此外,对算术、比较和逻辑运算符的运用也是必备技能。流程控制结构如if语句、switch语句、for循环、while循环和do-while循环是编写程序逻辑的基础。函数则是组织代码、实现模块化设计的关键,而指针则是C语言的精髓...
例如,考生可能会遇到关于数据类型选择、程序逻辑错误排查、函数参数传递、指针操作、内存管理等方面的问题。通过解答这些问题,考生可以巩固基本概念,提高解决问题的能力。 在复习C语言的过程中,历年真题的作用...
同样缺乏具体信息,但可能是关于数据结构或算法的选择题。 23. 选择A。这可能与编程语言中的特定概念有关,例如变量赋值、数据类型或函数调用。 22. 选择A。这道题目可能涉及面向对象编程中的一个概念,比如类的...
在这道笔试题中,`README.txt`可能会详细解释问题的具体需求,以便开发者能正确理解和解决问题。它可能会列出测试用例,帮助检查代码的正确性,或者提供编译和运行代码的指南。 基于以上信息,我们可以推测这道笔试...
1. **基础语法**:变量定义、数据类型(如整型、浮点型、字符型等)、运算符(算术、关系、逻辑、位操作等)、流程控制(if-else、switch-case、循环结构for、while、do-while)。 2. **函数**:函数的定义、调用、...
对于每一道题目,理解出题意图、分析问题、设计解决方案并编写出高效、易读的代码是非常重要的。此外,熟悉常用的API和类库,如Java Collections Framework中的ArrayList、LinkedList、HashMap等,也将大大提升解题...
每一道题目的答案不仅给出了正确代码,还详细解释了每一步操作的原因和逻辑,帮助考生理解解题思路,掌握解题技巧。解析部分还可能包括了错误陷阱的提示,使考生在遇到类似问题时能避免犯同样的错误。 在使用【上机...