如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的字符串,输出其最小周期。
思路:从此题的描述,输入一定是完整的字符串,且原题说明没有空格输入,所以直接scanf即可,只不过每次样例间会有一个空行,只需要getchar跳过就行。原题还对输出有要求,具体不在赘述。既然是完整的字符串,那么它的周期一定是字符串长度的因子,特别注意1和他本身,所以先开一个数组来存放因子,接着以因子做循环遍历即可。已经AC代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
getchar();//因为有空行
for(int ii=1;ii<=n;ii++)
{
char a[85];
getchar();
scanf("%s",a);
int len=strlen(a);int b[20];int k=0;
for(int j=1;j<=len;j++){
if(len%j==0) b[k++]=j;
}
int flag=0;
for(int i=0;i<k;i++)
{
flag=0;
for(int j=b[i];j<len;j++)
if(a[j]!=a[j%b[i]])
{
flag=1;break;
}
if(!flag){
printf("%d",b[i]);break;
}
}
if(ii==n) printf("\n");
else printf("\n\n");
}
return 0;
}