《算法竞赛入门经典(第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时不会输出回车,保证输出格式的正确
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值