POJ1690 简单运算去括号

题目大意:

给定一串只含加减和括号的运算,去掉没用的括号和空白字符输出

这里其实只要去找当前括号前面那个运算符是不是减号,如果是减号且这个括号内出现过运算符说明这个括号应该存在

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5
 6 using namespace std;
 7 #define N 1010
 8 #define MOD 1000007
 9 #define base 31
10
11 char s[N];
12 char que[N];
13 int top;
14 bool flag[N];
15
16 void solve()
17 {
18     top = 0;
19     for(int i=0 ; i<strlen(s) ; i++){
20         que[++top] = s[i];
21         flag[top] = true;
22         if(s[i] == ‘)‘){
23             int cnt = 0 , ch=0;//ch记录括号过程中有没有出现过多次运算
24             for(int j=top ; j>0 ; j--){
25                 if(que[j]==‘(‘ && flag[j]==true){
26                     cnt--;
27                     if(cnt == 0){
28                         int k=j-1;
29                         while(k){
30                             if(flag[k]==true&&(que[k]==‘(‘||que[k]==‘+‘||que[k]==‘-‘)) break;
31                             k--;
32                         }
33                       //  cout<<i<<" "<<j<<" "<<k<<endl;
34                         if(ch==0 || k==0 ||(k>0&&que[k] != ‘-‘)) flag[top] = flag[j] = false;
35                     }
36                 }
37                 else if(que[j]==‘)‘ && flag[j]==true) cnt++;
38                 else if(que[j]==‘+‘ || que[j]==‘-‘) ch++;
39             }
40         }
41     }
42 }
43
44 int main()
45 {
46     #ifndef ONLINE_JUDGE
47         freopen("a.in" , "r" , stdin);
48     #endif // ONLINE_JUDGE
49     int n;
50     while(~scanf("%d" , &n))
51     {
52         gets(s);
53         for(int i=0 ; i<n ; i++){
54             gets(s);
55             solve();
56             for(int i=1;i<=top;i++){
57                 if(que[i] == ‘ ‘) continue;
58                 if(flag[i]==true) printf("%c" , que[i]);
59             }
60             puts("");
61         }
62     }
63     return 0;
64 }
时间: 2024-11-09 00:47:10

POJ1690 简单运算去括号的相关文章

java新手练习:用Frame编写一个可以识别二级运算和括号优先运算的计算器

废话少说直接上代码,希望看过的朋友能和我多交流,,谢谢 package Myjisuanqi; import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.TextField;import java.awt.event.MouseEvent;import java.awt.even

51Nod 1684 子集价值 (平方和去括号技巧)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1684 题意: 新建一个位运算,求所有子集通过这个位运算后的答案的平方和是多少. 先想弱化版: 新建一个位运算,求所有子集通过这个位运算后的答案的和是多少. 枚举每一个二进制位,看有多少个子集能够使这一位为1 dp[i]表示前i个数中,能使枚举的这一位为1的方案数 根据第i个数选或者是不选转移 ans= Σ  2^j * 第j位的dp[n] 这里是平方和 设一个子集位运算

教你简单的去运营一个社区论坛

首先运营是个很宽泛的词.往大说,可以上升到运作,管理,这就包括决策,内容,技术,市场,销售.不考虑金钱和远景很大的话,重要级就是先后顺序.(不自信地说,一家之言,具体有待商榷) 在这里,我理解为题主问的是狭义的运营,即针对内容团队.其他因素完全忽略.当然,除非内容端是无可取代性,否则狭义运营再好,也白搭.俗话叫,不怕神一样的对手,就怕……. 回归问题,从内容端入手首先保证三个关键词,稳定,规律,及时.重要性同样是先后顺序. 这里应该会有不同观点,即及时.常关注互联网的人的人回知道这么一句话,唯快

NYOJ--244--16进制的简单运算(C++控制输入输出)

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000)接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

南阳oj-244-16进制的简单运算

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000) 接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

用于JS日期格式化,以及简单运算的Date包装工具类

1. [文件] yDate.js/** * | yDate.js | Copyright (c) 2013 yao.yl | email: [email protected] | Date: 2012-09-03 | */(function(global) {     var objectPrototypeToString = Object.prototype.toString;     var isDate = function(value) {        return objectPro

NYOJ-244-16进制的简单运算

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000) 接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

Redis 的简单运算

Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 decr key 在原字段上减 1 只能对整数操作 decrby key decrement 在原字段上 减去 整数 (decrement) 只能对整数操作 incrbyfloat key increment 在原字段上加上浮点数 (increment) 可以操作浮点数 或者 整数 C:\Users\o

原码、反码、补码之间的快速转换和简单运算

现在很多人都在学习计算机语言,那么原码.反码.补码之间的快速转换和简单运算是怎么样的呢?今天小编为大家讲讲具体的方法,希望能够对大家有所帮助. 正数部分: 正整数的原码.反码和补码是一样的,即看到符号位(第一位)是0,就可以照着写出其他两种码. 负数部分转换: 原码和反码的相互转换:符号位不变,数值位按位取反 原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1 已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1 负数部分具体情况: 1)     原码转换为反码:符号位不变,