Time limit 3000 ms
OS Linux
Description
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k。例如,字符串“abcabcabcabc”以3为周期(当然,他也以6、12等等为周期)。
现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。
Input
输入首先是一个整数n,代表有n组数据。
每组数据占一行,是一个长度不超过80的字符串。
两组相邻的输入之间有一个空行。
加粗样式
Output
每组数据在一行内输出一个整数k,代表该字符串的最小周期。
两组相邻的输出之间应当有一个空行。
Sample Input
2
abcabcabc
HoHoHo
Sample Output
3
2
个人觉得吧 这题挺水的 只要掌握string.h里的几个函数就能很好的模拟这个过程
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char data[1000];
scanf("%s",data);
int len = strlen(data);
char dete[1000] = {0};
char temp[1000] = {0};
for(int i = 0 ; i < len ; i++)
{
dete[i] = data[i]; //挨个读取字符串
if(len % (i + 1) == 0) //如果一个子串是这字符串的周期串,则母串长度一定是子串长度的整数倍
{
strcpy(temp , dete);
for(int j = 1 ; j < len / (i + 1) ; j++)
{
strcat(temp , dete);// 将前面的字符串补成一样长度的字符串
}
if(strcmp(temp , data) == 0)
{
printf("%d\n",i + 1);//下标加1就是周期
break;
}
memset(temp , 0 , sizeof(temp));//这句应该可以不用
}
}
if(n != 0)
{
printf("\n");//特别注意这题的格式 相邻两组的输入是有换行的 我在这被wa了36发 hhhhhh
}
}
return 0;
}