求zoj 1423 测试数据

yilizkongjian 2010-03-23 11:28:23
自己试了好些测试数据都没问题,可是一提交就WA,高手帮忙看看~
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1423

我的思路是:当遇到左括号时,看前面的符号是+还是-,如果是+(或者前面无符号),则略过不输出(而且与其对应的右括号也不输出),如果是-则判断这对括号内是否没有操作符,若有则输出该左括号,若无则不输出。
程序:
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
int m,len,i,j,k;
char exp[260],op,tmp;
stack<int> st;
bool par[260];
while(scanf("%d",&m)!=EOF){
getchar();//处理"\n"
while(m--)
{
gets(exp);
len=strlen(exp);
op='+';
memset(par,0,sizeof(par));
while(!st.empty())
st.pop();
for(i=0;i<len;i++)
{
if(exp[i]==' ')
continue;
if(exp[i]>='A'&&exp[i]<='Z')
printf("%c",exp[i]);
if(exp[i]=='+')
{
printf("+");
op='+';
}
if(exp[i]=='-')
{
printf("-");
op='-';
}
if(exp[i]=='(')
{
if(op=='+')
continue;
else{
st.push(i);
for(j=i+1;j<len;j++)
{
if(exp[j]==' ')
continue;
if(exp[j]>='A'&&exp[j]<='Z')
tmp=exp[j];
if(exp[j]=='(')
st.push(j);
if(exp[j]==')')
{
k=st.top();
st.pop();
if(k==i)
{
printf("%c",tmp);
i=j;
break;
}
}
if(exp[j]=='+'||exp[j]=='-')
{
op=exp[j];
printf("(%c",tmp);
par[i]=true;
i=j-1;
break;
}
}
}
}
if(exp[i]==')')
{
if(!st.empty())
{
k=st.top();
st.pop();
if(par[k])
printf(")");
}
}
}
printf("\n");
}
}
}
...全文
229 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilizkongjian 2010-03-23
  • 打赏
  • 举报
回复
自己顶上。求高手给测试数据,帮忙看下

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧