这是反向抛光表示法的代码。当我在unix上运行它时工作正常但是codechef说错了答案。请帮忙。
#include<stdio.h>
#include<string.h>
void push(char);
void pop();
char stack[400];
unsigned long top=0;
int main()
{
unsigned long len, test_case,i=0,j=0;
char expr[400];
scanf("%u\n",&test_case);
for(;j<test_case;j++)
{
scanf("%s\n",expr);
len=strlen(expr);
for(;i<len;i++)
{
if(expr[i]=='+'||expr[i]=='-'||expr[i]=='*'||expr[i]=='/'||expr[i]=='^')
push(expr[i]);
else if(expr[i]==')')
{
pop();
}
else if(expr[i]=='(')
continue;
else
printf("%c",expr[i]);
}
}
return 0;
}
void pop()
{
if(top==-1)
return;
else
{
printf("%c",stack[top]);
top=top-1;
}
}
void push(char x)
{
if(top==400)
return;
else
{
stack[++top]=x;
}
}
答案 0 :(得分:2)
更改此行
for(;i<len;i++)
到
for(i=0;i<len;i++)
然后它会正常工作。在codechef中有很多测试用例,因此在你的程序中,它可以在第一个测试用例中正常工作,但之后它会失败,因为&#39; i&#39;从第二个测试用例开始,它将从第一个案例结束。因此,您必须在每个测试用例中初始化i的值。
答案 1 :(得分:0)
暂时只留下我注意到的地方
`scanf("%u\n",&test_case);` //"%u" for unsigned not unsigned long
`scanf("%s\n",expr);` //%s : newline to not input are separated by white space
答案 2 :(得分:0)
你必须初始化无符号长i = 0;在for循环中,好像你接受了两个或更多的测试用例,我会从最后一个案例中为每个下一个案例开始。
答案 3 :(得分:0)
添加
top=0;
stack[0]=0;
在结束for
循环之前的函数main
并更改
for(;i<len;i++)
至for(i=0;i<len;i++)
。