大神帮我看下这个ACM题,我程序测试没发现错误,但OJ上提交就是错误,我不知道哪里有问题?

考古人员发现地球曾经存在一个高级文明叫做Delta,而且发现这个文明的具有文字和语言。他们使用+表示加,-表示减,*表示乘,/表示整数除,%表示取模,但算术式不同,他们把要计算的数放到前面,运算符放在计算对象的后面,比如 1 2 + 表示 1+2, 1 12 + 3 4 + * 表示(1+12)*(3+4)。考古人员希望你帮助他们编写一个程序,计算出这些计算式的值。

输入:
第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例。每行为一个字符串(长度不超过200个字符),数和数,数和运算符,运算符和运算符之间分别用一个空格隔开,数都为非负整数,且小于或等于231-1.
我的程序:
#include <stdio.h>
#include <string.h>
int calculate(char c, int a, int b)
{
if(c=='+') return a+b;
if(c=='*') return a*b;
if(c=='/') return a/b;
if(c=='-') return a-b;
}
int main()
{
int k,i,j,res,num[1000],c;
int l,a,b,x,y;
char s[1000],f[1000][1000];
scanf("%d",&k);
getchar();
while(k--)
{
gets(s);
l = strlen(s);
memset(f,0,sizeof(f));
memset(num,0,sizeof(num));
c = x = 0;
for(i=0; i<=l-1; i++)
{
if(s[i] != ' ')
{
c = i;
break;
}
}
j = 0;
for(i=c; i<=l-1; i++)
{
if(s[i]==' ')
{
j++;
x = 0;
continue;
}
else
{
f[j][x] = s[i];
x++;
}
}
a = j;
for(i=0; i<=a; i++)
{
num[i] = 0;
if(f[i][0]>='0' && f[i][0]<='9')
{
l = strlen(f[i]);
for(j=0,b=l-1; j<=l-1; j++,b--)
{
x = 1;
for(y=1; y<=b; y++) x*=10;
num[i] += (f[i][j]-'0')*x;
}
}
}
for(i=3; i<=a; i++)
{
if(f[i][0]>=42 && f[i][0]<=47 && f[i-1][0]>47 && f[i-2][0]>47)
{
num[i] = calculate(f[i][0],num[i-2],num[i-1]);
f[i][0] = '\0';
}
}
res = 0;
if(f[2][0]>=42 && f[2][0]<=47) res = calculate(f[2][0],num[0],num[1]);
if(f[3][0] == '\0') res = num[0];
for(i=3; i<=a; i++)
{
if(f[i][0]>=42 && f[i][0]<=47) res = calculate(f[i][0],res,num[i-1]);
}
printf("%d\n",res);
}
return 0;
}

会不会是内存超出了系统要求?
int k,i,j,res,num[1000],c;
int l,a,b,x,y;
char s[1000],f[1000][1000]; 这些数组定义的太大了追问

我开小一点也是错。。。问题不是出在这里

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

杭电acm2029这道题为什么能用dev运行但是oj的时候却说是错误的呢...
你是用G++提交的吧,,我用C++和C提交都Accept,用G++提交Compilation Error,,原因在于G++不支持strrev这个函数。希望能帮助你。

杭电OJ题目2034,我的答案正确却总是wrong answer
对于acm的题目,我觉得如果在自己的电脑上运行对了,提交错误,怎么找出来错误,第一,反复读题目,看自己的程序中都满足题目中的要求没有,有时候输出的形式也要注意一下,有可能是要你把所有需要输入的数据都输进去,然后在吧所有输入的处理后再输出,有可能也是输入一个就处理一个,这样的情况也有的...

...如下,自己输入计算没查出错误,但是OJ报WA,求大神解释
注意对前缀0的处理,给你加了几行代码后ac了 str3[j]='\\0';替换为 j--;while(j>=0&& str3[j]=='0')j--;if(j<0)j++;str3[++j]='\\0';--- include <stdio.h>#include <string.h>#define SIZE 1100voidAdd(char*str1,char*str2,char*str3){ int i, j, i1, i2, tm...

能帮我看一下为什么我的ACM代码放到OJ上老出expected declaration specifi...
你用g++提交吧。 你这不是严格的c语言,所以用其他的编译器可能有问题。。。你看下在哪一行出的问题,那边有提示行数的。

无奈\\不解,UvaOJ为什么不提供出错时的测试数据
usaco只适合入门,很容易让你养成不检查就随便提交的习惯,正规的oj是不会这么做的 ACM中只有正确和错误,要么满分,要么0分,比赛现场更加紧张,因为还算上罚时,每次提交前都要做相当慎重的考虑 OI也很严格,因为没有实时反馈,一点细节问题就会使你爆0 当你没有AC时,能做的就是反复耐心的查程序...

华为OJ平台上提交后为什么是答案错误,测试用例未全部通过?在CB上运行结...
虽然我不知道华为OJ是什么样,不过应该是ACM模式的吧。如果是的话,那么你的输入输出应该严格按照题目描述的来做,像是printf("Input a number:\\n");这种题目没让你输出的东西你输出了肯定就是错了。

(C语言)ACM OJ上的题,提交上去一直显示Presentation Error。也就是结果...
行末不应该有多余的空格。把 printf(" ");改成 if (j!=m-1) printf(" ");就对了。PS:一般来说输出都这么写:for (i=0; i<m; i++) for (j=0; j<m; j++) printf("%d%c",c[i][j],j==m-1?'\\n':' ');

c++提交上oj的代码,显示超时,不知道有何改进方法,求大神指点
我之前也遇到相似的问题,我建议用字符数组先读入数据,然后再一个一个的拿出来判断,这样就不怕因为读入数据量过大或过快导致一些数据没有读入。这时程序就会出现还在等待输入的状态,所以就TLE(超时)的问题。

一道简单的acm题,老是过不了oj,求帮助
我觉得应该是结果超int型,你可以试用long long ,不行只能使用高清度加法了,或者java大数

ACM的简单题 小弟我看不明白问题
这一题是已知和,求两台电脑中存放的题目数的可能解。由于每组测试数据只需要输出一个可行解,所以要用到'special judge',呵呵。呃,另外,如果你不是在LightOJ上看到的这个题,那么你可能真的迷失在缺失的上下文中了,去LightOJ上看一下就知道了,这个是上面的1001。

相似回答