首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

zoj 1905为啥超时了,算法的有关问题吗

2012-02-07 
zoj 1905为啥超时了,算法的问题吗?#includestdio.h#includestring.hmain(){chara[1000005]inti,j,k,m

zoj 1905为啥超时了,算法的问题吗?
#include   <stdio.h>
#include   <string.h>
main()
{
        char   a[1000005];
        int   i,j,k,m,flag;
        while(scanf( "%s ",a)!=EOF   &&   strcmp(a, ". ")!=0)
        {
            j=(int)strlen(a);
            for(i=1;a[i]!= '\0 ';i++)
            {
                if((int)strlen(a)%i==0)
                {
                        flag=0;
                        if(a[i]==a[0]&&(a[i+1]==a[1]   ||   strlen(a)==2)&&(a[i+2]==a[2]   ||   strlen(a)==3))
                        {
                            flag=1;
                            for(k=i;a[k]!= '\0 '&&flag!=0;k+=i)
                            {
                                  for(m=0;m <i;m++)
                                  {
                                      if(a[k+m]!=a[m])
                                      {
                                          flag=0;
                                          break;
                                      }
                                  }
                            }
                        }
                        if(flag==1)
                        {
                                j=i;
                                break;
                        }
                    }
            }
            printf( "%d\n ",(int)strlen(a)/j);
        }


}
           


[解决办法]
#include <stdio.h>
#include <string.h>

int main()
{
char str[1000000];
int i,j;
int len,strLength;
while(scanf( "%s ", str)==1)
{
if(strcmp(str, ". ")==0)
break;
len=strLength=strlen(str);
j=0;
for(i=1; i <strLength; ++i)
{
if(str[0] == str[i])
{
if(strLength % i == 0)
{
len = i;
while(str[i] && str[i] == str[j])
i++,j++;
if(str[i] == 0)
break;
i--;
j=0;
len = strLength;
}
}
}
printf( "%d\n ",strLength / len);
}
return 0;
}

热点排行