• 华为2019校招笔试-逻辑计算

    • 题目描述
    • 输入描述
    • 例如:
    • 示例1
      • 输入
      • 输出
    • 示例2
      • 输入
      • 输出
    • 示例代码

华为2019校招笔试-逻辑计算

题目描述

常用的逻辑运算有And(表示为&),Or(表示为|),Not(表示为!),他们的逻辑是:

1&1=1 1&0=0 0&1=0 0&0=0
1|1=1 1|0=1 0|1=1 0|0=0
!0=1 !1=0

其中,他们的优先关系为:Not(!)>And(&)>Or(|);
例如:

A|B&C 实际是 A(B&C)
A&B|C&D 实际是 (A&B)|(C&D)
!A&B|C 实际是 ((!A)&B)|C

输入描述

1.测试用例中间无空格,无需考虑空格
2.测试用例表示式中只会出现如下字符:

0,1,(,),&,|,!

3.测试用例所给的输入输出都是合法的。无需考虑非法输入。
4.测试用例表达式长度不会超过128个字符。
5.括号可以嵌套。

例如:

1|(1&0) = 1
1&0|0&1 = 0
!0&1|0 = 1
((!0&1))|0 = 1

示例1

输入

!(1&0)|0&1

输出

1

示例2

输入

!(1&0)&0|0

输出

0

示例代码

public class Solution {public static void main(String[] args) throws Exception {Scanner in = new Scanner(System.in);String input = in.nextLine();Solution solution = new Solution();String postfixExpression = solution.converToPostfix(input);//        System.out.println(postfixExpression);int result = solution.numberCalculate(postfixExpression);System.out.println(result);}//对后缀表达式进行运算的函数private int numberCalculate(String postfix) throws Exception {Stack st = new Stack<>();//创建一个操作数栈for (int i = 0; postfix != null && i < postfix.length(); i++) {char c = postfix.charAt(i);//如果为运算符if (isOperator(c) && !st.isEmpty()) {int d3 = 0;if (c == '!') {int d1 = Integer.parseInt(st.pop().toString());d3 = d1 == 0 ? 1 : 0;} else {int d2 = Integer.parseInt(st.pop().toString());int d1 = Integer.parseInt(st.pop().toString());if ('&' == c) {d3 = d1 & d2;}if ('|' == c) {d3 = d1 | d2;}}//将运算结果压入操作数栈中st.push(d3);} else {//为操作数时直接压入操作数栈st.push(c);}}return (int) st.pop();//返回运算结果}//将算术表达式转换为后缀表达式的函数,结果以字符串的形式返回private String converToPostfix(String expression) throws Exception {Stack<Character> st = new Stack<>();   //初始化一个运算符栈String postfix = new String();   //用于储存后缀表达式for (int i = 0; expression != null && i < expression.length(); i++) {
//          System.out.println(st);char c = expression.charAt(i);if (' ' != c) {//为左括号if (isOpenParent(c)) {st.push(c);}//为右括号else if (isCloseParent(c)) {char ac = st.pop();while (!isOpenParent(ac)) {postfix = postfix.concat(String.valueOf(ac));if (!st.empty()) {ac = st.pop();}}//左括号前面有!则popchar temp = st.pop();if (temp == '!') {postfix = postfix.concat(String.valueOf(temp));} else {st.push(temp);}}//为运算符else if (isOperator(c)) {//运算栈非空,取出栈顶优先级高的运算符送完后缀表达式if (!st.empty()) {char ac = st.pop();//栈取出的字符优先级比c高while (!st.isEmpty() && priority(ac) >= priority(c)) {postfix = postfix.concat(String.valueOf(ac));ac = st.pop();}//栈取出的字符优先级比c低,则将取出的字符重新入栈if (ac != ' ') {st.push(ac);}}st.push(c);    //将c入栈}//为操作数,直接串联到postfix内else {postfix = postfix.concat(String.valueOf(c));}}}//当表达式读完就将算术栈pop出加入postfixwhile (!st.isEmpty()) {postfix = postfix.concat(String.valueOf(st.pop()));}return postfix;}//判断字符为运算符private boolean isOperator(char c) {return '!' == c || '&' == c || '|' == c;}//判断字符为左括号private boolean isOpenParent(char c) {return c == '(';}//判断字符为右括号private boolean isCloseParent(char c) {return c == ')';}//判断算法的优先级private int priority(char c) {if (c == '!') {return 3;}if (c == '&') {return 2;} else if (c == '|') {return 1;} else return 0;}
}

华为2019校招笔试相关推荐

  1. 多益网络2019校招笔试

    多益网络2019届校招笔试 从n个数中取k个数,相加等于m,有多少种方法 final static int[] arr = {1, 2, 3, 4, 5, 6, 7};final static int ...

  2. 华为2020校招笔试编程题 看这篇就够了(上)

    背景 近日一位在华为的师兄整理了一份内部的提纲给我们,想着以后肯定不会去华为,于是乎分享给大家,看看菊花厂今年的笔试题目是什么样子的. 编程题范围 这好像来自一个华为内部的文档,据说今年华为内部也在进 ...

  3. 华三2019校招笔试

    算法笔试 由20道英文选择题 5道英文名词解释 和5个大题 英文选择题主要涉及基础知识 5个英文名词解释  有  Maximum likelihood ; Decision Tree;Stochast ...

  4. 京东校招java笔试题_试卷: 京东2019校招笔试Java开发工程师笔试题(1-)

    D 把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路. 解析:死锁:在多道程序设计环境下,多个进程可能竞争一定数量的资源,.一个进程申请资源,如果资源不可用,那么进程进入等待状态.如 ...

  5. 商汤科技自动驾驶研究员2019校招笔试第一题-跳台阶(每次可跳1~m级,跳到第n级的跳法总数)

    递推公式如下: n<=m时 v[n]=2<<(n-2) n>m时 v[n]=2*v[n-1]-v[n-1-m] 输入n超过10^18,考虑是维护一个供迭代的双向队列做动态规划, ...

  6. 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题

    九月迅雷,华为,阿里巴巴,最新笔试面试十题 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面 ...

  7. 2014九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试题

    九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题 题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅 ...

  8. 华为2019秋招面试问答题!(附带笔试参考题)

    前言: 采菊东篱下,悠然见南山",菊花厂的名气就不多介绍了! 今天为大家带来的内容是华为2019秋招面试问答题!(附带笔试参考题)具有不错的参考意义,希望能够帮助到大家! 内容如下: 总共分 ...

  9. 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试五十题

    题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...

  10. 2019美团点评校招笔试劝退之旅

    2019美团点评校招笔试劝退之旅 三种题型:选择题(40题).简答题(1题).编程题(2题) 选择题 好难-令人崩溃,涉及到的知识点很多,如果认真复习了专业课的话做起来应该比较容易 看清楚单选多选,建 ...

最新文章

  1. 【Windows10】安装一些更新时出现问题,但我们稍后会重试
  2. 【译】A quick list of new enterprise features in iOS 13, iPadOS, and macOS 10.15 Catalina
  3. Redis入门与数据类型介绍
  4. Weblogic EJB 学习笔记(3)精
  5. 觉得WaitGroup不好用?试试ErrorGroup吧!
  6. matlab之结构体的创建与存储(CSV数据)
  7. 关于主窗体与子窗体之间的通信以及面向对象思想的一些应用
  8. spring整合hibernate初步
  9. 政企上云正当时,华为云12.12大促助力中小企业数字转型升级
  10. 如何成为Linux平台C语言程序员(转)
  11. Android手机使用Windows应用,微软宣布在你的手机应用上运行安卓APP功能向Windows 10稳定版提供...
  12. 《丁丁历险记系列之委托》-- 摘自http://www.cnblogs.com/xfxxx/archive/2010/04/03/1703839.html...
  13. php实现室内地图导航,室内三维地图引擎功能
  14. CSP2019滚粗记
  15. win7下iTools Android模拟器安装与配置
  16. 锅炉如何实现物联网云平台方案
  17. SAP AW01N 资产浏览器数据查看详解
  18. 如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
  19. matlab滤波器滤除低频直流信号,对低频信号的滤波的方法
  20. (附源码)Springboot大学生综合素质测评系统 毕业设计 162308

热门文章

  1. 嵌入式linux运行mbedtls,mbedTLS(PolarSSL)简单思路和函数笔记(Client端)
  2. SpringBoot大数据分析后台管理系统平台
  3. Android实战简易教程五(ListView用法研究)
  4. 软件测试人员每天的工作日常
  5. OpenCV提取图书条码(ISBN码)
  6. Java POI 删除最后一页空白页
  7. Java 面试真题 【继承静态代码块执行时机】
  8. HTML5期末大作业:商城网站设计——小米商城官网首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码...
  9. 计算机桌面不显示时间,怎么把时间显示在桌面
  10. SAP ERP的版本演变基础知识