`
异常试试
  • 浏览: 837 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

关于一道笔试题,对逻辑运算符的分析

阅读更多

  微笑  第一次发表博客,不喜勿喷,如有不足或错误,欢迎指出。

下面是这道笔试题:

 

假设我们是中国国家航天局人员,当玉兔号离开嫦娥三号之后,我们需要能够控制玉兔号在月球上开展探测工作。我们先假定虹湾区是一个很大的平原,我们在虹湾区建立一个坐标轴,如下图(附件):

 

玉兔号离开嫦娥三号后,根据自身安装的定位系统可以知道自己的初始位置,我们记为 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。这样运算完全满足题意,当然也会有点难读懂。这段代码也有很多地方没处理,主要是写了这个逻辑过程,请不要在意这些细节。

  • 大小: 10.1 KB
分享到:
评论

相关推荐

    程序员笔试常见简答题

    【程序员笔试常见简答题】是针对求职者准备的笔试题集合,涵盖了算法、数据结构、逻辑推理等多个方面。以下是对这些题目所涉及知识点的详细解释: 1. **矩阵旋转填充**:这是一个典型的矩阵操作问题,涉及到数组的...

    二级c经典机试笔试真题

    笔试部分不仅测试你的理论知识,还考察阅读理解、问题分析和逻辑推理能力。答题时,注意审题清晰,思路条理,用简洁明了的语言表达自己的观点。对于选择题,可以采用排除法、对比法等策略来提高答题准确率。 通过...

    C / C++ 语言笔试题 200页 doc 文档

    《C/C++编程笔试题详解:200页精华文档》 C/C++语言作为计算机科学的基础,一直是软件开发领域的重要工具。这份200页的doc文档包含了丰富的C语言笔试题,旨在帮助学习者巩固基础知识,提升编程技能。虽然其中部分...

    二级c语言考试笔试真题

    1. **C语言基础知识**:包括变量、数据类型(如int、char、float等)、运算符(算术、关系、逻辑、赋值等)、流程控制(if-else、switch、for、while等)。 2. **函数的使用**:理解函数定义、调用,参数传递,局部...

    java二级全国计算机等级考试历年多卷笔试试题及答案

    Java二级全国计算机等级考试是针对...同时,对每一道试题进行深入理解和分析,找出错误并及时纠正,是提高成绩的关键。此外,理论学习与实践编程相结合,通过编写小程序来巩固所学知识,也是提升编程能力的有效方式。

    二级C语言笔试历年真题。

    2. **运算符与表达式**:熟悉C语言的各种运算符,如算术运算符、关系运算符、逻辑运算符、赋值运算符等,理解运算符的优先级和结合性,能够正确地编写和解析表达式。 3. **控制结构**:掌握条件语句(if-else)、...

    二级C语言笔试历年真题

    每一道真题都是一次检验自我学习成果的机会,通过答案分析错误,找出知识盲点,进行针对性复习。 总的来说,这个压缩包提供的资源是备考二级C语言考试的宝贵资料,考生应充分利用这些真题,结合教材深入学习,提高...

    2008年9月计算机二级C笔试历年真题及参考答案

    1. **基础语法**:包括变量定义、数据类型(如int、char、float等)、运算符(算术、关系、逻辑、位操作等)、流程控制(if-else、switch、for、while等)。 2. **函数**:理解函数的作用、参数传递、函数指针、...

    计算机二级真题(03年上)

    此外,对算术、比较和逻辑运算符的运用也是必备技能。流程控制结构如if语句、switch语句、for循环、while循环和do-while循环是编写程序逻辑的基础。函数则是组织代码、实现模块化设计的关键,而指针则是C语言的精髓...

    C语言历年真题

    例如,考生可能会遇到关于数据类型选择、程序逻辑错误排查、函数参数传递、指针操作、内存管理等方面的问题。通过解答这些问题,考生可以巩固基本概念,提高解决问题的能力。 在复习C语言的过程中,历年真题的作用...

    阿里巴巴2009年技术类笔试卷答案

    同样缺乏具体信息,但可能是关于数据结构或算法的选择题。 23. 选择A。这可能与编程语言中的特定概念有关,例如变量赋值、数据类型或函数调用。 22. 选择A。这道题目可能涉及面向对象编程中的一个概念,比如类的...

    java代码-李胜笔试第二题

    在这道笔试题中,`README.txt`可能会详细解释问题的具体需求,以便开发者能正确理解和解决问题。它可能会列出测试用例,帮助检查代码的正确性,或者提供编译和运行代码的指南。 基于以上信息,我们可以推测这道笔试...

    2000-2009二级C笔试题目

    1. **基础语法**:变量定义、数据类型(如整型、浮点型、字符型等)、运算符(算术、关系、逻辑、位操作等)、流程控制(if-else、switch-case、循环结构for、while、do-while)。 2. **函数**:函数的定义、调用、...

    华育国际一期经典题

    对于每一道题目,理解出题意图、分析问题、设计解决方案并编写出高效、易读的代码是非常重要的。此外,熟悉常用的API和类库,如Java Collections Framework中的ArrayList、LinkedList、HashMap等,也将大大提升解题...

    上机系统(三级C语言)

    每一道题目的答案不仅给出了正确代码,还详细解释了每一步操作的原因和逻辑,帮助考生理解解题思路,掌握解题技巧。解析部分还可能包括了错误陷阱的提示,使考生在遇到类似问题时能避免犯同样的错误。 在使用【上机...

Global site tag (gtag.js) - Google Analytics