博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 1423 (Your)((Term)((Project))) (模拟+数据结构)
阅读量:6322 次
发布时间:2019-06-22

本文共 2409 字,大约阅读时间需要 8 分钟。

题目链接:

Sample Input

3
(A-B + C) - (A+(B - C)) - (C-(D- E) )
((A)-( (B)))
A-(B+C)

Sample Output
A-B+C-(A+B-C)-(C-(D-E))
A-B
A-(B+C)

题目大意:给出加减代数表达式,仅由变量(大写字母表示),圆括号,加号 '+', 减号'-'组成,要求去掉多余的括号,但是不能改变表达式中的加号和减号,也就是说如果括号外面是减号,那就不能去掉

分析:

  对于每对括号标号,满足以下任意一个条件的就可以去掉,

  1.最外面的括号

  2.前面不是 减号 的括号

  3.前面是减号,但左右括号之间仅有变量,而没有 加减号 的括号。

第一反应是用栈做,但是STL的stack用在本题不方便,因为本题要遍历栈的元素,所以要自己写栈。

代码如下:

1 # include
2 # include
3 # include
4 # define MAX 300 5 using namespace std; 6 char str[MAX]; //输入 7 char st[MAX]; //自定义栈 8 int main(){ 9 int T;10 scanf("%d",&T);11 getchar();12 while(T--){13 int i,j;14 gets(str);15 int len=strlen(str);16 st[0]=' '; //如果第一个字符是'(',将情况1变成了情况2,少讨论17 int tail=1; //尾指针18 for(i=0; i
=1; j--){22 if(st[j]=='('){23 if(st[j-1]!='-'||st[j-1]=='-'&&flag)//括号前面不是减号 或者虽是减号但仅包含变量24 st[j]=' ';//取消该左括号,并且不要右括号,即不处理它25 else{26 st[tail++]='Y'; //代表右括号27 st[j]='X'; //代表左括号28 }29 break;30 }31 else{32 if(st[j]=='+'||st[j]=='-')33 flag = false;34 }35 }36 }37 else{38 if(str[i]!=' ')39 st[tail++]=str[i];40 }41 }42 for(i=1; i!=tail; i++){ //遍历栈元素43 if(st[i] != ' '){44 if(st[i] == 'X')45 cout<< "(";46 else if(st[i] == 'Y')47 cout<< ")";48 else49 cout<

 

附贴网上大部分人的思路:由于是模拟题,数据很小,直接暴力就好了。先扫描一次将空格去掉,再不断扫描,将(A)类型的括号去掉,直到不能去为止。再扫描一次,将所有括号用match数组匹配起来,若 s[i]==')' 那么 match[i]为与它匹配的'('所在的下标。再扫描一次,将'('前面不为负号的括号对全部标记mark[i]=1表示可以去掉。最后扫描一次,根据mark[i]数组将多余括号去掉~~~

1 #include
2 #include
3 char s[258]; 4 int mark[258],match[258],zhan[258],num,opnum; 5 int main() 6 { 7 int m,i,j,l,temp; 8 9 scanf("%d",&m);10 getchar();11 while(m--)12 {13 gets(s);14 memset(mark,-1,sizeof(mark));15 memset(match,-1,sizeof(match));16 for(l=strlen(s),i=j=0;i

 

 

转载地址:http://ktpaa.baihongyu.com/

你可能感兴趣的文章
Forms组件
查看>>
JSP
查看>>
python 入门笔记
查看>>
10. JavaScript学习笔记——JSON
查看>>
设计模式-装饰模式(08)
查看>>
leftjoin及多个leftjoin执行顺序
查看>>
User Experience Collection
查看>>
POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
查看>>
多个互相有联系的checkbox的单选逻辑
查看>>
插入排序及其扩展
查看>>
C#项目中关于多个程序集下App.config文件的问题
查看>>
CSRF的防御
查看>>
华为软件测试工程师与普通软件工程师的区别
查看>>
js验证码倒计时
查看>>
[Flutter] 发布自己的插件 package
查看>>
margin负值 – 一个秘密武器
查看>>
近邻搜索算法
查看>>
获取Gitlab项目的Token
查看>>
自定义分页
查看>>
10.1 国庆 考试
查看>>