大致题意就是给你一个周期串,让你判断他的最小周期是多少,输入两行之间有空行,输出两组之间也有空行。
这道题巨坑,我多加了几个判断条件来剪枝一直PE。后来干脆去掉就AC了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int i,j,k,n,m,t;
char a[100];
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
n=strlen(a);
for(k=1; k<n; k++)
{
if(n%k!=0)//周期串长度必定是周期的整数倍
continue;
int f=1;
for(i=0; i+k<n; i++)
{
if(a[i]!=a[i+k])//有一个不符合可以直接跳出
{
f=0;
break;
}
}
if(f)//内层循环判断到最后了,证明这是一个周期串
break;
}
if(t) printf("%d\n\n",k);
else printf("%d\n",k);
}
return 0;
}