Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

其实只是多了个无关的判断

Posted by Gchris at 2006-12-09 16:24:06 on Problem 1936
In Reply To:hawk 我有疑问哈 Posted by:acm1985 at 2006-05-07 15:39:48
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> 
> void main()
> {
> 	char s1[100000],s2[100000];
> 	int len1,len2;
> 	int i,j;
> 	while(scanf("%s%s",&s1,&s2)==2)
> 	{
> 		len1=strlen(s1);
> 		len2=strlen(s2);
> 		j=0;
> 		for(i=0;i<len1 && j<len2;i++)
> 		{
> 			while(s1[i]!=s2[j++])
> 				;
> 		}
> 		if(i=len1 && j<=len2)//疑问在这里 ,这个程序AC了,但是if语句明显有问题啊,怎么还能AC呢?????????????????????????????????????????????
> 			printf("Yes\n");
> 		else
> 			printf("No\n");
> 	}
> }

其实只是多了个无关的判断
" if(i=len1 && j<=len2)//疑问在这里 "
把"i=len1"去掉也能过,因为能执行到这一步 len 必然等于 len1 ; 再说"j<=len2",由于"while(s1[i]!=s2[j++])",所以能 YES 的话 j 必然 <= len2 ,否则就是NO 了.
还有一个问题是这"while(s1[i]!=s2[j++])",
我用"person compression"测试,发现 j 循环到了100003 
    "caseDoesMatter CaseDoesMatter" 测试, j 循环到了100001
显然是没有控制 j 的取值的问题,( 但是它竟然也能停下来 ,就这里有很大问题 ,要不它应该是死循环的 ) ,我是这样写的"for( ; s1[i] != s2[j++] && j <= len2+1 ; )"  




Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator