循环节

来源:互联网 发布:铭牌打标机软件 编辑:程序博客网 时间:2024/06/10 09:10

题目描述:

循环节

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

X最近爱上了一种奇怪的游戏,就是找出一个字符串中的最小循环节。
对于最小循环节的定义:对于字符串A存在字串B,使得A是由N个完整的B组成的,那么B就是A的一个循环节,长度最小的那一个为最小循环节。

输入

多组输入。
每组输入一个字符串,长度不大于80,只包含26个小写字母。

输出

输出一个字符串,代表最小循环节。

示例输入

aaaaabab

示例输出

aab

提示

解题思路:由题意知串A是由N个完整的串B组成的,可求串A长度的质因子,且B的长度必是A的质因子中的一个,然后对A质因子的每一种情况进行枚举讨论。
参考代码:
#include <stdio.h>  #include <string.h>  #define N 100  int main()  {      char s[N];      int len,i,j,k,a[N],cout;      while(scanf("%s",s)!=EOF)      {          len=strlen(s);          for(cout=0,i=1;i<=len;i++)              if(len%i==0)                  a[cout++]=i;          /*         puts("3¤?èòò×ó:");         for(i=0;i<cout;i++)             printf("%d ",a[i]);         putchar('\n');         */          for(i=0;i<cout;i++)          {              k=a[i];              for(j=0;j<len;j++)                  if(s[j]!=s[j%k]) break;              if(j>=len) break;          }          if(i<cout)              for(j=0;j<k;j++)                  putchar(s[j]);          putchar('\n');      }      return 0;  }  



0 0
原创粉丝点击