@ 蓝桥杯 练习系统 算法训练 ALGO-57

资源限制

时间限制:1.0s 内存限制:512.0MB


问题描述

从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简。另外不考虑’+’  '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形。


输入格式

表达式字符串,长度不超过255,  并且不含空格字符。表达式中的所有变量都是单个小写的英文字母, 运算符只有加+减-乘*除/等运算符号。


输出格式

去掉多余括号后的表达式


测试样例1

Input:
a+(b+c)-dOutput:
a+b+c-d

测试样例2

Input:
a+b/(c+d)Output:
a+b/(c+d)

测试样例3

Input:
(a*b)+c/dOutput:
a*b+c/d

测试样例4

Input:
((a+b)*f)-(i/j)Output:
(a+b)*f-i/j

ACcode:

import java.io.*;
import java.util.*;public class Main {static int len;static byte[] line;static Queue<Item> queue;public static void main(String[] args) throws IOException {PrintWriter out = new PrintWriter(System.out);len = System.in.read(line = new byte[257], 1, 256);queue = new LinkedList();line[0] = line[len] = '+';for (int i = 0; i < len; i++)if (line[i] == '(')i = push(i, new Item(i));while (queue.size() > 0)queue.poll().delete();for (int i = 1; i < len; i++)if (line[i] < 127)out.write(line[i]);out.close();}static int push(int i, Item now) {while (line[i] != ')')if (line[++i] == '(')i = push(i + 1, new Item(i));else if (line[i] < '0' && line[i] > ')' && (line[i] == '+' || line[i] == '-'))now.tag = true;queue.offer(now);return (now.r = i) + 1;}static class Item {int l, r;boolean tag;Item(int l) { this.l = l; }boolean delete() {int l = this.l, r = this.r;byte ltag = line[--l], rtag = line[++r];while (ltag >= '0' || ltag <= ')') ltag = line[--l];if (ltag == '/') return false;if (ltag == '-' && this.tag)return false;if (ltag == '*' && this.tag)return false;while (rtag >= '0' || rtag <= ')') rtag = line[++r];if ((rtag == '*' && !this.tag) || (((ltag == '+' || ltag == '-') && (rtag == '+' || rtag == '-')))) {line[this.l] = line[this.r] = 127;return true;}return false;}}
}

先递归取得所有括号对信息再讨论

if (ltag == '/') return false;
if (ltag == '-' && this.tag)return false;
if (ltag == '*' && this.tag)return false;
if (rtag == '*' && !this.tag) return true;
if (((ltag == '+' || ltag == '-') && (rtag == '+' || rtag == '-'))) return true;

this.tag 标记该组括号内运算符优先级最低是加减还是乘除
ltagrtag 分别表示括号组左右最近的运算符
ltag == '/' 则无法删除
this.tag ∈ '+','-'ltag ∈ '-','*','/' 则无法删除
ltag,rtag ∈ '+','-' 无视括号里的内容都可以删除括号,因为上述条件中已经对 ltag ∈ '-' 先行做出处理
this.tag,ltag ∈ '*','/' 无视括号里的内容都可以删除括号,因为上述条件中已经对 ltag ∈ '/' 先行做出处理

其余情况皆视为无法删除括号对

毕竟不需要公式化简,所以这些很基础的东西就可以实现该题

算法训练 删除多余括号相关推荐

  1. Java实现 蓝桥杯VIP 算法训练 删除多余括号

    算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且 ...

  2. Java实现 蓝桥杯 算法训练 删除数组零元素

    算法训练 删除数组零元素 时间限制:1.0s 内存限制:512.0MB 提交此题 从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移 ...

  3. java蓝桥杯练习 删除多余括号

    java蓝桥杯练习 删除多余括号 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算 ...

  4. [算法设计与分析]第三章练习题:删除多余括号

    问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简.另外不考虑'+' '-'用作正负号的情况, ...

  5. Java 算法 删除多余括号

    这里写目录标题 题目描述 解题思路 代码 题目描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简. ...

  6. 蓝桥杯 ALGO-79 算法训练 删除数组零元素

    从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素, 其后元素向数组首端移动.注意,CompactIntegers函数需要接受数组及其元素个数作为参数, ...

  7. 蓝桥杯练习系统习题-算法训练3

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练3 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  8. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  9. 算法训练 字符删除 c语言

    算法训练 字符删除 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,先输入一个字符串str(长度不超过20),再输入单独的一个字符ch,然后程序会把字符串str当中出现的所有的c ...

最新文章

  1. java面试题标签_java面试笔试题 (WEB)
  2. A Multi-task Deep Network for Person Re-identification
  3. Python 随机森林分类
  4. live555 源码分析:简介
  5. leetcode 303. 区域和检索 - 数组不可变(Java版)
  6. mysql 案例 ~ pt修复工具的使用
  7. 你们好好的学,回头教教我~
  8. linux程序改ip地址吗,如何在Linux中从C设置IP地址
  9. 数据结构之B+树插入详解
  10. 开发笔记1 关于指针,结构体使用指针的问题
  11. 色彩专题(PS的颜色理论)
  12. 基于AD9854的DDS信号发生器设计
  13. Unity 使用混音器AudioMixer改变语速而不改变音色
  14. 体积小性能强悍能吃鸡的电脑主机 NUC8I7HVK
  15. python符号积分
  16. iphone panic故障对照表_苹果 AirPods 新维修工具上线:可区分是污垢堵塞还是故障 - AirPods...
  17. 使用Hexo平台搭建个人博客
  18. 解析物流行业分账规则
  19. 2020年电力电缆试题及答案及电力电缆考试平台
  20. java完整的利用itext5制作pdf、二维码图片插入pdf,并解析pdf中的二维码信息

热门文章

  1. 阿里云ACP有什么用?该怎么获取?
  2. netty 物联网项目总结
  3. border(元素边框详解)
  4. Android模糊搜索框实现
  5. Cuda编程加速图像预处理
  6. iPhone X 媒体查询适配
  7. 带你玩转kubernetes-k8s(第46篇:深入分析k8s网络原理[CNM、CNI]网络模型)
  8. 有源晶振与无源晶振的区别
  9. firefox 书签导入导出
  10. Anatomy of Nvidia's Voxel Cone Tracing Code (VXGI)