题目:如果一个字符串可以由某个长度为k的字符串重复多次得到,就说该串以k为周期。如"abcabcabcabc"以3为周期。输入一个长度不超过80的串,输出它的最小周期。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,flag,T;
char s[90];
scanf("%s",s);
int n=strlen(s);
for(i=0; i<n/2; i++)
{
flag=1;
T=i+1; //假设周期为T
k=0; //比较前面序列的第k+1个字符
for(j=i+1; j<2*T; j++) //最多比较T次
{
if(s[j]!=s[k++])
{
flag=0;
break;
}
}
if(flag)
{
/*if(j<n)
{
if(s[j]==s[0])
break;
else
flag=0;
}
else
break;*/
if(n%T==0) //避免“ababc”此类情况
break;
else
flag=0;
}
}
if(flag)
{
printf("最小周期为:%d\n",T);
for(i=0; i<T; i++)
{
printf("%c",s[i]);
}
printf("\n");
}
else
{
printf("最小周期为:%d\n",n);
for(i=0; i<n; i++)
{
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}