利用约数计算周期,直接枚举
#include<stdio.h>
#include<string.h>
#define maxn 800
char any[maxn];
int som[maxn];
int main(){
int k,j=0,T,n,x=0,y=0,i;
char c;
scanf("%d",&T);
memset(som,0,sizeof(som));
while(T--){
scanf("%s",any);
n=strlen(any); <span style="font-family: Arial, Helvetica, sans-serif;">//这里用n记录了输入字符串的长度</span>
for (i = 1 ; i <= n ; ++ i)
if (n%i == 0) {
for (k = i ; k < n ; ++ k)
if (any[k] != any[k%i])
break;
if (k == n) {
som[j]=i;j++;
break;
}
}
}
for(int s=0;s<j;s++){
printf("%d\n",som[s]);
}
return 0;
}
这一份是之前写的伪代码 =。= 好乱
/*int h=n,flag2=0;
while(h--){
if(any[h]==any[0])
flag2=1;
else break;
}
if(flag2==1){
wbd[a]=1;a++;
break;
}
for(i=2;i<n;i++){
if(n%i==0){
som[y]=i; //这里用som数组记录下字符串长度n的约数 只要字符串有周期 就在这里产生
y++;
}
}
for(int t=0;t<y;t++){ //y这里记录的是字符串长度的约数的个数
for(int z=0;z<som[t];z++){
if(any[z]==any[som[t]+z]){
flag=1;
continue;
}
else {
flag=0;
break;
}
}
if(flag==1){
wbd[a]=som[t];a++;
break;
}
}
}
for(int u=0;u<a;u++){
printf("%d\n",wbd[u]);
}
}*/