UVA 455 Periodic Strings

题意就是求输入字符串的最小组成序列,比如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 }

 

posted @ 2019-01-15 21:19  付玬熙  阅读(132)  评论(0编辑  收藏  举报