华为2019校招笔试
- 华为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校招笔试相关推荐
- 多益网络2019校招笔试
多益网络2019届校招笔试 从n个数中取k个数,相加等于m,有多少种方法 final static int[] arr = {1, 2, 3, 4, 5, 6, 7};final static int ...
- 华为2020校招笔试编程题 看这篇就够了(上)
背景 近日一位在华为的师兄整理了一份内部的提纲给我们,想着以后肯定不会去华为,于是乎分享给大家,看看菊花厂今年的笔试题目是什么样子的. 编程题范围 这好像来自一个华为内部的文档,据说今年华为内部也在进 ...
- 华三2019校招笔试
算法笔试 由20道英文选择题 5道英文名词解释 和5个大题 英文选择题主要涉及基础知识 5个英文名词解释 有 Maximum likelihood ; Decision Tree;Stochast ...
- 京东校招java笔试题_试卷: 京东2019校招笔试Java开发工程师笔试题(1-)
D 把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路. 解析:死锁:在多道程序设计环境下,多个进程可能竞争一定数量的资源,.一个进程申请资源,如果资源不可用,那么进程进入等待状态.如 ...
- 商汤科技自动驾驶研究员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,考虑是维护一个供迭代的双向队列做动态规划, ...
- 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题
九月迅雷,华为,阿里巴巴,最新笔试面试十题 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面 ...
- 2014九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试题
九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题 题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅 ...
- 华为2019秋招面试问答题!(附带笔试参考题)
前言: 采菊东篱下,悠然见南山",菊花厂的名气就不多介绍了! 今天为大家带来的内容是华为2019秋招面试问答题!(附带笔试参考题)具有不错的参考意义,希望能够帮助到大家! 内容如下: 总共分 ...
- 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试五十题
题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...
- 2019美团点评校招笔试劝退之旅
2019美团点评校招笔试劝退之旅 三种题型:选择题(40题).简答题(1题).编程题(2题) 选择题 好难-令人崩溃,涉及到的知识点很多,如果认真复习了专业课的话做起来应该比较容易 看清楚单选多选,建 ...
最新文章
- 【Windows10】安装一些更新时出现问题,但我们稍后会重试
- 【译】A quick list of new enterprise features in iOS 13, iPadOS, and macOS 10.15 Catalina
- Redis入门与数据类型介绍
- Weblogic EJB 学习笔记(3)精
- 觉得WaitGroup不好用?试试ErrorGroup吧!
- matlab之结构体的创建与存储(CSV数据)
- 关于主窗体与子窗体之间的通信以及面向对象思想的一些应用
- spring整合hibernate初步
- 政企上云正当时,华为云12.12大促助力中小企业数字转型升级
- 如何成为Linux平台C语言程序员(转)
- Android手机使用Windows应用,微软宣布在你的手机应用上运行安卓APP功能向Windows 10稳定版提供...
- 《丁丁历险记系列之委托》-- 摘自http://www.cnblogs.com/xfxxx/archive/2010/04/03/1703839.html...
- php实现室内地图导航,室内三维地图引擎功能
- CSP2019滚粗记
- win7下iTools Android模拟器安装与配置
- 锅炉如何实现物联网云平台方案
- SAP AW01N 资产浏览器数据查看详解
- 如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
- matlab滤波器滤除低频直流信号,对低频信号的滤波的方法
- (附源码)Springboot大学生综合素质测评系统 毕业设计 162308
热门文章
- 嵌入式linux运行mbedtls,mbedTLS(PolarSSL)简单思路和函数笔记(Client端)
- SpringBoot大数据分析后台管理系统平台
- Android实战简易教程五(ListView用法研究)
- 软件测试人员每天的工作日常
- OpenCV提取图书条码(ISBN码)
- Java POI 删除最后一页空白页
- Java 面试真题 【继承静态代码块执行时机】
- HTML5期末大作业:商城网站设计——小米商城官网首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码...
- 计算机桌面不显示时间,怎么把时间显示在桌面
- SAP ERP的版本演变基础知识