题意:如果一个字符串可以由某个长度为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;
}
}
}
}