zoukankan      html  css  js  c++  java
  • 周期串

    #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;
    }

  • 相关阅读:
    背水一战 Windows 10 (26)
    背水一战 Windows 10 (25)
    背水一战 Windows 10 (24)
    背水一战 Windows 10 (23)
    背水一战 Windows 10 (22)
    背水一战 Windows 10 (21)
    背水一战 Windows 10 (20)
    背水一战 Windows 10 (19)
    背水一战 Windows 10 (18)
    背水一战 Windows 10 (17)
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2446205.html
Copyright © 2011-2022 走看看