ACM 题目 poj 2250 请教 这道题我提交之后总是提示 Output Limit Exceeded 不知道为什么
测试数据好像都没有错希望高手能具体指出一下错误谢谢啦~#include<iostream>#defineU1#defineL2#defineD3#defineNUM100...
测试数据好像都没有错 希望高手能具体指出一下错误 谢谢啦~
#include<iostream>
#define U 1
#define L 2
#define D 3
#define NUM 100+10
#define WORDS 30+10
int main()
{
char A[NUM][WORDS],B[NUM][WORDS];
int LA,LB;
int i,j;
int T[NUM][NUM],Len[NUM][NUM];
char R[NUM][WORDS];
int m,n;
for( ; true; )
{
//i=1;
for( i=1,scanf("%s",A[i]); A[i][0] != '#'; )
{
i++;
scanf("%s", A[i]);
}
if(i==1)
{
break;
}
LA = i-1;
for( i=1,scanf("%s",B[i]); B[i][0] != '#'; )
{
i++;
scanf("%s",B[i]);
}
if(i==1) { break;}
LB = i-1;
for( i=0,j=0; i<=LA; i++) { Len[i][j]=0;}
for( i=0/*此时j=0*/; j<=LB; j++) { Len[i][j]=0;}
for( i=1; i<=LA; i++)
{
for( j=1; j<=LB; j++)
{
if( !strcmp( A[i], B[j]) )
{
Len[i][j]=Len[i-1][j-1] +1;
T[i][j]=D;
}
else
{
if(Len[i][j-1] >= Len[i-1][j])
{
Len[i][j]=Len[i][j-1];
T[i][j]=L;
}
else
{
Len[i][j]=Len[i-1][j];
T[i][j]=U;
}
}
}
}
m=LA; n=LB;
for( i=Len[LA][LB]; i>=1; )
{
switch( T[m][n])
{
case D:
strcpy(R[i],A[m]);
i--;
m--;
n--;
break;
case U:
m--;
break;
case L:
n--;
break;
}
}
i=1; printf("%s",R[i]);
for( i++; i<=Len[LA][LB]; i++)
{ printf(" %s",R[i]);}
printf("\n");
}
return 0;
} 展开
#include<iostream>
#define U 1
#define L 2
#define D 3
#define NUM 100+10
#define WORDS 30+10
int main()
{
char A[NUM][WORDS],B[NUM][WORDS];
int LA,LB;
int i,j;
int T[NUM][NUM],Len[NUM][NUM];
char R[NUM][WORDS];
int m,n;
for( ; true; )
{
//i=1;
for( i=1,scanf("%s",A[i]); A[i][0] != '#'; )
{
i++;
scanf("%s", A[i]);
}
if(i==1)
{
break;
}
LA = i-1;
for( i=1,scanf("%s",B[i]); B[i][0] != '#'; )
{
i++;
scanf("%s",B[i]);
}
if(i==1) { break;}
LB = i-1;
for( i=0,j=0; i<=LA; i++) { Len[i][j]=0;}
for( i=0/*此时j=0*/; j<=LB; j++) { Len[i][j]=0;}
for( i=1; i<=LA; i++)
{
for( j=1; j<=LB; j++)
{
if( !strcmp( A[i], B[j]) )
{
Len[i][j]=Len[i-1][j-1] +1;
T[i][j]=D;
}
else
{
if(Len[i][j-1] >= Len[i-1][j])
{
Len[i][j]=Len[i][j-1];
T[i][j]=L;
}
else
{
Len[i][j]=Len[i-1][j];
T[i][j]=U;
}
}
}
}
m=LA; n=LB;
for( i=Len[LA][LB]; i>=1; )
{
switch( T[m][n])
{
case D:
strcpy(R[i],A[m]);
i--;
m--;
n--;
break;
case U:
m--;
break;
case L:
n--;
break;
}
}
i=1; printf("%s",R[i]);
for( i++; i<=Len[LA][LB]; i++)
{ printf(" %s",R[i]);}
printf("\n");
}
return 0;
} 展开
展开全部
你这个错误是因为输出超多了,是因为你没有正确判断文件的输入结束。
加上!=EOF才行。
#include<iostream>
#define U 1
#define L 2
#define D 3
#define NUM 100+10
#define WORDS 30+10
int main()
{
char A[NUM][WORDS],B[NUM][WORDS];
int LA,LB;
int i,j;
int T[NUM][NUM],Len[NUM][NUM];
char R[NUM][WORDS];
int m,n;
for( ; true; )
{
int flag=1;
//i=1;
for( i=1,flag=scanf("%s",A[i]); A[i][0] != '#'; )//这儿要加上的,不然的话i会一直加的。
{
if(flag==EOF)break;
i++;
scanf("%s", A[i]);
}
if(flag==EOF)
{
break;
}
LA = i-1;
for( i=1,scanf("%s",B[i]); B[i][0] != '#'; )
{
i++;
scanf("%s",B[i]);
}
if(i==1) { break;}
LB = i-1;
for( i=0,j=0; i<=LA; i++) { Len[i][j]=0;}
for( i=0/*此时j=0*/; j<=LB; j++) { Len[i][j]=0;}
for( i=1; i<=LA; i++)
{
for( j=1; j<=LB; j++)
{
if( !strcmp( A[i], B[j]) )
{
Len[i][j]=Len[i-1][j-1] +1;
T[i][j]=D;
}
else
{
if(Len[i][j-1] >= Len[i-1][j])
{
Len[i][j]=Len[i][j-1];
T[i][j]=L;
}
else
{
Len[i][j]=Len[i-1][j];
T[i][j]=U;
}
}
}
}
m=LA; n=LB;
for( i=Len[LA][LB]; i>=1; )
{
switch( T[m][n])
{
case D:
strcpy(R[i],A[m]);
i--;
m--;
n--;
break;
case U:
m--;
break;
case L:
n--;
break;
}
}
i=1; printf("%s",R[i]);
for( i++; i<=Len[LA][LB]; i++)
{ printf(" %s",R[i]);}
printf("\n");
}
return 0;
}
加上!=EOF才行。
#include<iostream>
#define U 1
#define L 2
#define D 3
#define NUM 100+10
#define WORDS 30+10
int main()
{
char A[NUM][WORDS],B[NUM][WORDS];
int LA,LB;
int i,j;
int T[NUM][NUM],Len[NUM][NUM];
char R[NUM][WORDS];
int m,n;
for( ; true; )
{
int flag=1;
//i=1;
for( i=1,flag=scanf("%s",A[i]); A[i][0] != '#'; )//这儿要加上的,不然的话i会一直加的。
{
if(flag==EOF)break;
i++;
scanf("%s", A[i]);
}
if(flag==EOF)
{
break;
}
LA = i-1;
for( i=1,scanf("%s",B[i]); B[i][0] != '#'; )
{
i++;
scanf("%s",B[i]);
}
if(i==1) { break;}
LB = i-1;
for( i=0,j=0; i<=LA; i++) { Len[i][j]=0;}
for( i=0/*此时j=0*/; j<=LB; j++) { Len[i][j]=0;}
for( i=1; i<=LA; i++)
{
for( j=1; j<=LB; j++)
{
if( !strcmp( A[i], B[j]) )
{
Len[i][j]=Len[i-1][j-1] +1;
T[i][j]=D;
}
else
{
if(Len[i][j-1] >= Len[i-1][j])
{
Len[i][j]=Len[i][j-1];
T[i][j]=L;
}
else
{
Len[i][j]=Len[i-1][j];
T[i][j]=U;
}
}
}
}
m=LA; n=LB;
for( i=Len[LA][LB]; i>=1; )
{
switch( T[m][n])
{
case D:
strcpy(R[i],A[m]);
i--;
m--;
n--;
break;
case U:
m--;
break;
case L:
n--;
break;
}
}
i=1; printf("%s",R[i]);
for( i++; i<=Len[LA][LB]; i++)
{ printf(" %s",R[i]);}
printf("\n");
}
return 0;
}
展开全部
楼主的程序在测试环境下不能正常结束,会一直输出最后一组测试数据的结果。
题目中对于输入的规定最后一句指明,文件结束符是输入结束的标志。而楼主的程序依赖一个测例的第一个单词是#来结束,显然是不合适的。
这里可以在读第一段文字的第一个单词时,用scanf("%s", xx) != EOF来判断是否读到了内容,在文件结束时,这个表达式的值为EOF,也就是文件结束标志。
楼主可以在程序正文变量定义之后加这样一句来测试程序的结束是否正常:
freopen("somefile.txt", "r", stdin);
这个语句会将somefile.txt重写向到标准输入,这个比较接近OJ的测试环境。
题目中对于输入的规定最后一句指明,文件结束符是输入结束的标志。而楼主的程序依赖一个测例的第一个单词是#来结束,显然是不合适的。
这里可以在读第一段文字的第一个单词时,用scanf("%s", xx) != EOF来判断是否读到了内容,在文件结束时,这个表达式的值为EOF,也就是文件结束标志。
楼主可以在程序正文变量定义之后加这样一句来测试程序的结束是否正常:
freopen("somefile.txt", "r", stdin);
这个语句会将somefile.txt重写向到标准输入,这个比较接近OJ的测试环境。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询