题意就是求输入字符串的最小组成序列,比如abcabcabc,是abc重复三次得到的,所以最小组成序列是abc,值为3,
注意:如果是abc,不能由序列重复得到,那么值为本身=3,
如果是aaa,就为a重复3次,值为1
1 #include "stdio.h"
2 #include "stdlib.h"
3 #include "string.h"
4 int isEqual(char const *str,int num)
5 {
6 int k,k1,k2,isequal=1;
7 char sub[80],curstr[80];
8 memset(curstr,'\0',80);
9 strncpy(curstr,str,num);//必须初始化,不然会崩
10 // printf(" curstr=%s length;%d\n",curstr,strlen(curstr));
11 for(k=0;k<strlen(str);k=k+num)
12 {
13 memset(sub,'\0',80);//必须初始化,不然会崩
14 strncpy(sub,str+k,num);
15 // printf(" k=%d sub=%s length:%d num=%d\n",k,sub,strlen(sub),num);
16 if(strcmp(sub,curstr)!=0)
17 {
18 // printf("return, k=%d\n",k);
19 return 0;
20 }
21 }
22 return 1;
23 }
24 int main()
25 {
26 int n,i,j,k,res,cur,min;
27 char str[80],str1[80],str2[80];
28 scanf("%d",&n);
29 while(n--)
30 {
31 scanf("%s",str);
32 cur=strlen(str);
33 min=strlen(str);
34 for(i=strlen(str);i>0;i--)
35 {
36 if(strlen(str)%i==0)
37 {
38 // printf("i=%d\n",i);
39 //判断满足吗
40 if(isEqual(str,i))
41 {
42 cur=i;
43 // printf(" cur=%d\n",cur);
44 }
45 if(cur<min)
46 {
47 min=cur;
48 }
49 }
50 }
51 printf("%d\n",min);
52 if(n!=0)
53 printf("\n");
54 }
55 }