`
异常试试
  • 浏览: 859 次
  • 性别: 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
分享到:
评论

相关推荐

    菜鸟的自我修炼——阿里巴巴一道笔试题浅谈

    一道简单的笔试题可能就是对这些基础知识的直接考察。 2. **面向对象**:Java是一种面向对象的语言,因此对类、对象、继承、封装和多态的理解至关重要。笔试题可能会设计一个简单的类结构,要求你实现特定功能或者...

    深信服2007笔试题

    【深信服笔试题解析】 在深信服的笔试题中,主要涵盖了计算机科学和编程的基础知识,包括序列规律推理、C++语法、网络通信方式、操作系统原理以及算法设计。以下是对这些知识点的详细解析: 1. **序列规律推理**:...

    程序员笔试常见简答题

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

    二级c经典机试笔试真题

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

    迅雷2010笔试题

    这是一道关于逻辑运算符、位运算符及其优先级的问题。根据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. **函数的使用**:理解函数定义、调用,参数传递,局部...

    奇虎360 2013校园招聘笔试题(含参考答案)-技术类.doc

    这篇文档是奇虎360公司在2013年进行校园招聘时的技术类笔试题,包含了一些计算机基础知识和编程相关的题目。以下是对部分题目及知识点的解析: 1. 问题未给出,但根据答案可能是计算立方体体积的问题,强调基础数学...

    腾讯笔试题及其答案

    ### 腾讯笔试题解析 #### 题目一:过桥问题 **题目描述**:假设A、B、C、D四个人要在黑夜中过一座桥,他们各自通过这...综上所述,通过仔细分析每一道题目并结合相关知识点,我们能够有效地解决这些笔试题中的问题。

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

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

    四月全国计算机等级考试二级C语言笔试试题及答案.pdf

    例如,第8题可能考察了指针和数组的关系,第10题可能涉及到函数参数的传递,第17题可能是一道关于算法的题目。解答这些题目需要考生对C语言有深入的理解,并能灵活应用。 复习时,考生应多做历年真题,熟悉考试题型...

    2012uc实习生招聘笔试题(研发类)

    ### 2012 UC实习生招聘笔试题解析 #### 综合题部分解析 **1. 图形逻辑推理** 此题考察的是考生的图形逻辑推理能力。题目给出了一组图形,要求考生根据图形1和2之间的逻辑关系,找出与图形3具有相同逻辑关系的图形...

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

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

    烽火星空2015校园招聘笔试

    通过以上分析,我们能够从这份笔试题中提取并总结出多个重要的计算机科学知识点,包括但不限于指针类型、位运算、运算符重载、IP 地址与子网掩码、成员函数与 this 指针的使用、模板函数以及静态成员变量等。

    中兴笔试题_(一).docx

    2. 白盒测试是对软件内部逻辑结构的测试,完全路径覆盖意味着每一条可能的执行路径都要被测试到。根据PDL语句,有以下路径:(1) record field 1 = 0,(2) record field 1 ≠ 0 且 record field 2 = 0,(3) record ...

    Python-pandas基础习题与答案

    - `|`:逻辑或运算符,用于连接多个条件。 **知识点12:学生人数最多的班级是哪两个?要求显示出班级名称和学生人数** ```python score['所在班级'].value_counts().head(2) ``` - **知识点说明**: - `head(2)...

    二级C语言笔试历年真题

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

    NEC面试 笔试03

    从给定的文件信息中,我们可以提炼出一系列与IT行业相关的知识点,主要涵盖了NEC面试与笔试中的技术考察点,包括但不限于算法优化、数据结构、编程语言特性以及数学逻辑问题。下面将对这些知识点进行详细阐述。 ###...

    拉钩网java笔试题分享

    - 使用一系列嵌套的条件语句和逻辑运算符(如`&&`、`||`)来实现复杂的判断逻辑。 - 使用`StringBuffer`构建返回结果,这样可以在不断修改字符串内容时保持较高的性能。 4. **字符串操作**: - 使用`indexOf()`...

Global site tag (gtag.js) - Google Analytics