题目:输入一个字符串,输出他的最小周期数,和最小周期循环的循环体
例如:
输入1:abcabcabcabc
输出1: 4 abc
输入2:aaaaa
输出2:1 a
输入3:asdfg
输出3:5 asdfg
#include <stdio.h>
int main(){
int m,n,j,i,x,z,num,s;
char ch[100];
for(i=1;i<100;i++){
scanf("%c",&ch[i]);//这里我们选择ch[1]作为第一个字符,方便之后的计算
if(ch[i]=='\n'){
break;
}
}
n=i-1;//字符串个数
for(i=1;i<=n;i++){
num=0;//设置一个变量作为信号
s=1;
if(n%i==0&&i<n){//防止数组溢出,所以这里i!=n ,只有字符长度的因子才能作为周期
for(j=1;j<=i;j++){
for(m=s;m<=n;m+=i){//因为你把字符分成组了,然后就要对每一个组的对应的字符比较,s是每一个组的第s个字符
if(ch[j]!=ch[m]){//这里是对每一组进行比较,如果有不等的,num就等于1
num=1;
}
}
s++;
}
if(num==0){
printf("周期为%d\n",n/i);//每一组i个,所以有n/i个组
for(j=1;j<=i;j++){
printf("%c",ch[j]);
}
return 0;//打印了之后马上结束程序,不然会重复打印
}
}
else if(i==n){//这种情况是没有循环,所以整个字符串自己就是循环体
printf("周期为%d\n",i);
for(j=1;j<=i;j++){
printf("%c",ch[j]);
}
return 0;//打印了之后马上结束程序,不然会重复打印
}
}
return 0;
}