您的位置:首页 > 其它

zoj1423(Your)((Term)((Project)))

2011-04-07 17:48 295 查看
题目的意思是把表达式中能去掉的括号都给去掉,但不改变运算符,

能够去掉的左括号至少满足以下条件中的一个:

1、括号左面不是‘-’

2、最外层的括号

3、单个变量外面的括号

代码:

# include<stdio.h>
# include<string.h>
int main()
{
int i,j,k,n,s[300],pre[300],visit[300],word;
char str1[300],str[300];
scanf("%d",&n);
getchar();
while(n--)
{
gets(str1);
k=0;
j=0;
for(i=0;str1[i]!=0;i++)
if(str1[i]!=' ') str[j++]=str1[i];
str[j]=0;
for(i=0;str[i]!=0;i++)
{
if(str[i]=='(') {k++;s[k]=i;}
else if(str[i]==')') {pre[i]=s[k];k--;}/*求出每一个右括号对应的左括号*/
}
memset(visit,0,sizeof(visit));
for(i=0;str[i]!=0;i++)
{
if(str[i]==')')
{
word=0;
for(j=i-1;j>=pre[i];j--)
if(str[j]=='+'||str[j]=='-') {word=1;break;}
if(pre[i]==0 || str[pre[i]-1]!='-' || (str[pre[i]-1]=='-' && word==0))/*满足上述三个条件中的任意一个*/
{
visit[i]=1;
visit[pre[i]]=1;
}
}
}
for(i=0;str[i]!=0;i++)
if(visit[i]!=1) printf("%c",str[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: