周期串

#include <stdio.h>
#include <string.h>
int main()
{
 char word[100];int ok=0;
 scanf("%s",word);
 int l=strlen(word);
 for (int i=1; i<=l; ++i)//周期必是1到l,若为1,即是常数串
 {
  if (l%i==0)//最小周期必是长度的约数
  {
   int ok=1;
   for (int j=i; j<l; ++j)
   {
    if (word[j%i]!=word[j])//个人认为j-
//word[j]为第二周期的第一个字符,word[j%i]是前一个周期的第一个字符(因为
//j=i;j%i=0;j每加1,j%i也加1,直到最后一组word[j]都等于word[j%i],则i为周期
     {
      ok=0;
      break;
     }
   }
   if (ok)
   {
    printf("%d\n",i);
    break;// this is the least cycle
   }
  }
  else
   continue;
 }
 return 0;
}

 

上述代码,无MMP时输出了长度

 

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
int main()
{
char word[100];
scanf("%s",word);
int l=strlen(word);
for (int i=1; i<=l; ++i)//周期必是1到l,若为1,即是常数串
//加上等号时,最小正周期为长度
{
if (l%i==0)//最小周期必是长度的约数
{
int ok=1;
for (int j=i; j<l; ++j)
{
if (word[j%i]!=word[j])//个人认为j-1亦可
//word[j]为第二周期的第一个字符,word[j%i]是前一个周期的第一个字符(因为
//j=i;j%i=0;j每加1,j%i也加1,直到最后一组word[j]都等于word[j%i],则i为周期
{
ok=0;
break;
}
}
if (ok&&i!=l)
{
printf("%d\n",i);
break;// this is the least cycle
}
else if(i==l)
printf("No MMP\n");
}
}
system("pause");
return 0;
}

posted @ 2012-04-13 18:06  加拿大小哥哥  阅读(855)  评论(0编辑  收藏  举报