您的位置:首页 > 其它

uva-455

2015-10-12 18:55 246 查看
利用约数计算周期,直接枚举

#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]);
}
}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: