北大acm1936的runtime error

来源:百度知道 编辑:UC知道 时间:2024/05/12 18:13:33
#include<stdio.h>
#include<string.h>
main()
{
int slength=0,tlength=0,i,j,n=0,m=0,p=0;
char s[1000],t[1000],st[1000];
while(scanf("%c",s[m])!='\0')
{slength++;m++; }
while(scanf("%c",t[p])!='\n')
{tlength++;p++; }
for(i=0;tlength-(i+slength)>=slength;i++)
{
for(j=i;j<=i+slength;j++)
{
st[j]=t[j];
}
if(!strcmp(s,st))
{
printf("Yes\n");n=1;break;
}
}
if(!n)printf("No\n");
}
自己感觉还可以啊,就是在输入的地方有点问题,有没有高人能指点一下
#include<stdio.h>
#include<string.h>
main()
{
int slength=0,tlength=0,i,j,n=0;
char s[1000],t[1000],st[1000];
scanf("%s",s);
slength=strlen(s);
scanf("%s",t);

错的不少。。。。
1。。题目说的input说了数的长度要100000,数组开小了.开成100005,
2。。这题是多CASE的题,前面应该用while(scanf("%s %s",s,t)!=EOF){}
3。。算法错了。。
4。。
AC代码
#include <stdio.h>
int main ()
{
char s[100200],t[100200];
int b,i,j,word;
while(scanf("%s %s",s,t)!=EOF)
{
b=0;
for(i=0;s[i];i++)
{
j=b;
word=0;
for(;t[j];j++)
{
if(t[j]==s[i]){b=j+1;word=1;break;}
word=0;
}
if(t[j]==0)break;
}
if(!word)printf("No\n");
else printf("Yes\n");
}
return 0;
}

不懂再问吧