《算法竞赛入门经典(第2版)》习题3-4周期串(Periodic Strings, UVa455)

习题3-4周期串(Periodic Strings, UVa455)

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define maxn 90
char s[maxn];
char a[maxn];
char b[maxn];
char c[maxn];
int main()
{ int n=0;int p=0;//定义两个变量
    scanf("%d",&n);//输入组数
    while(n--)
    {   memset(a,'\0',sizeof(c));//刷新a数组
        scanf("%s",s);//输入一段序列,例如abcabcabc
        for(int i=0;i<strlen(s);i++)//遍历abcabcabc的每个元素
        {   b[0]=s[i];//把被遍历的元素进行赋值,这一步是有必要的,因为strcat(a,s[i])的格式不对
            strcat(a,b);//链接b到a上,得到一个假定周期串,例如a
            p=int(strlen(s))%int(strlen(a));//判断s的有效位数是否能整除a的有效位数,因为周期串的周期一定是整数,例如a的长度是1,9可以对1整除,余数为0
            memset(c,'\0',sizeof(c));//刷新c数组
            if(!p)//如果周期的重复次数为一整数
            {   int g=int(strlen(s))/int(strlen(a));//得到重复次数存在g中
                while(g--)
                {strcat(c,a);}//不断链接a到c中,达到和c串相同的长度,例如最终结果是aaaaaaaaa
               if(!strcmp(c,s)) {printf("%d\n",int(strlen(a)));break;}//比较两个串是否相同,例如aaaaaaaaa和abcabcabc是否相同,如果相同,strcmp会返回0,输出最小周期a串的长度
            }
        }
        if(n) printf("\n");//n=0时不会输出回车,保证输出格式的正确
    }
    
}
发布了12 篇原创文章 · 获赞 2 · 访问量 188
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览