• 周期串


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

  • 相关阅读:
    Linux软件管理
    Linux计划任务与进程管理
    PHP学习 Day_04
    Linux网络管理
    单播组播的实现
    Linux 下的tmpfs文件系统(/dev/shm)
    11.Linux date命令的用法
    Luogu P3783 [SDOI2017]天才黑客
    Luogu P3768 简单的数学题
    Luogu P2336 [SCOI2012]喵星球上的点名
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2446205.html
Copyright © 2020-2023  润新知