华为机试题:仿LISP
package com.nowcoder.huawei; import java.util.*; public class LISP {
// 只通过80%
// (+ (* 2 3) (^ 4))
// (+ (* 2 3) (^ 4))(2 3)
// ((+ 2 3)
// ((+ 2 3))
// (^ (+ (* 2 3) (^ ((^ 4)))))
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String express = scanner.nextLine(); Stack<Character> stack = new Stack<>();
for (int i = 0; i < express.length(); i++) {
char c = express.charAt(i);
if (c == ')') {
StringBuilder builder = new StringBuilder();
char top;
while (!stack.empty() &&(top = stack.pop()) != '(') {
builder.append(top);
} String currExp = builder.reverse().toString();
// System.out.println(currExp); String[] ops = currExp.split(" ");
if (ops.length == 2) {
int value = Integer.valueOf(ops[1]);
value++;
String count = String.valueOf(value);
for (int j = 0; j < count.length(); j++) {
stack.push(count.charAt(j));
}
} else if (ops.length == 3) {
int a = Integer.valueOf(ops[1]);
int b = Integer.valueOf(ops[2]);
int value = 0;
switch (ops[0]) {
case "+":
value = a + b;
break;
case "*":
value = a * b;
break;
}
String count = String.valueOf(value);
for (int j = 0; j < count.length(); j++) {
stack.push(count.charAt(j));
}
} else if (ops.length == 1) {
for (int j = 0; j < ops[0].length(); j++) {
stack.push(ops[0].charAt(j));
}
} } else {
stack.push(c);
}
} StringBuilder builder = new StringBuilder();
while (!stack.empty())
builder.append(stack.pop()); try {
System.out.println(Integer.valueOf(builder.reverse().toString()));
} catch (Exception e) {
System.out.println(-1);
}
}
}
华为机试题:仿LISP的更多相关文章
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 华为机试题【13】-wave数组找字母游戏
题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...
- 华为机试题【10】-求数字基root
题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一 ...
- 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置
题目要求很简单,就是给你一个数组,对它进行排序,并且排序后,奇数要放在奇数的位置上,偶数要放在偶数的位置上,如果不满足这个规则的话就在数组上填充0 实现代码如下,文中值得注意的一点就是如何判读这个数字 ...
- 求一个int型整数的两种递减数之和(java)--2015华为机试题
题目描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的 ...
- 2017华为机试题--Floyd算法
小K是X区域的销售经理,他平常常驻"5"城市,并且经常要到"1"."2"."3"."4"." ...
- 华为机试题 N阶楼梯的走法,每次走一步或者两步
在Stairs函数中实现该功能: 一个楼梯有N阶,从下往上走,一步可以走一阶,也可以走两阶,有多少种走法? (0<n<=30)<> 例如3阶楼梯有3种走法: 1.1.1 1.2 ...
- 2014华为机试西安地区B组试题
2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...
- 2014华为机试西安地区A组试题
2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...
随机推荐
- 【Java/JDBC】借助ResultSetMetaData,从数据库表中抽取字段信息存成Excel文件
本例工程下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-3.rar 工作中曾有个为42张表建立测 ...
- java基于jcifs.smb实现远程发送文件到服务器
1.服务器指定共享文件夹 1.1.验证服务器共享文件夹本地可以访问: 2.导入依赖的相关jar包 jcifs-1.3.**.jar: <dependency> <gr ...
- JMX简介及was上的使用
参考文章:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/0908_sunyan_jmxdeploy/inde ...
- 程序间获取ALV显示数据(读取ALV GRID上的数据)
程序间获取ALV数据的两种方法: 方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点: * Execu ...
- spring 使用@Valid校验数据出错DEBUG org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Failed to resolve argument 0 of type
问题原因:在 @Valid 的那个参数后面紧跟着一个 BindingResult 的参数(一定要紧跟着) 参考来源:https://segmentfault.com/q/101000000838468 ...
- Spring Aop(七)——基于XML配置的Spring Aop
转发:https://www.iteye.com/blog/elim-2396043 7 基于XML配置的Spring AOP 基于XML配置的Spring AOP需要引入AOP配置的Schema,然 ...
- GRU网络
1.GRU(Gated Recurrent Unit) 为了克服RNN无法远距离依赖而提出了LSTM,而GRU是LSTM的一个变体,GRU保持LSTM效果的同时,又使结构变得简单. 2.GRU结构 G ...
- manjaro Docker环境配置记
1.系统配置如下: ‘by: /home/inkhin/桌面/深度截图_选择区域_20191004145104.png [吐槽: ChromeLinux版居然不能用博客园TinyMce的上传图片功能] ...
- Qt5."Clang Code Model"一些设置
1.有些设置 可能这里在设置了,到别的地方(例如换了一个机子) 又要设置,这样的话 在不熟练的时候 手动敲进去会比较慢,这里 先记录下来 以后要用 直接复制就行了 2.Qt5.9.8 vs2017 : ...
- Linux selinux 防火墙
cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take ...