*** uva 455 周期串 (基础的判断是否循环算法)

题意:如果一个字符串可以由某个长度为K的字符串重复多次得到,就可以说该串以K为周期。例如,abcabcabcabc 以3为周期(注意,他也可以是以6和12为周期)输入一个长度不超过80的字符串,输出他的最小周期,两个连续输出用空行隔开(输出格式,要求两个连续用空行隔开,也就是说最后一个不用空行,要单独判断输出)。 

思路:字符产周期p只能是1到字符串长度(s_size),首先,字符串长度应该能被周期p整除,其次满足 s[ i%p ]=s[ i ]  ( i 要从零开始,字符串存储要从s[0]开始存)

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int main ()
{
    int T;
    cin >>T;

    while (T--)
    {
        char s[85];
        scanf("%s",s);
        int s_size=strlen(s);

        for(int i=1;i<=s_size;i++)
        {
            int miss=0;
            if(i==s_size)
            { if(T==0)
                 cout <<s_size<<endl;
              else
                 cout <<s_size<<endl<<endl;
                 break;
            }
            if(s_size%i) continue;                 //*先判断能不能整除,不能整出一定不是周期串
            for(int j=0;j<s_size;j++)
            {
                if(s[j%i]!=s[j]){ miss=1; break;}  //**要从0开始才能体现出s[i%C] 和s[i] 的方便之处 

            }
            if(miss==0)
            {
                 if(T==0)
                 cout <<i<<endl;
              else
                cout <<i<<endl<<endl;
                break;

            }


        }

    }

}

猜你喜欢

转载自blog.csdn.net/qq_41199502/article/details/82706632