题目:算出字符串最短循环节
注意:自己的方法多次WA,最后参考了一下,主要是循环节处的循环要注意
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
int N = 0;
char word[100];
scanf("%d", &N);
while (N--)
{
scanf("%s", word);
int len = strlen(word);
for (int i = 1; i <= len; ++i)
{
if (len % i == 0)//如果满足要求,最后的长度%len=0,所以下一个循环节开始应该是len % i == 0 的时候
{
int flag = 1;
for (int j = i; j < len; ++j)
{
if (word[j] != word[j % i]) //非常巧妙,用j%i,可以不断循环,一直到最后,如果都没有改变flag的状态
//就是需要的i
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
break;
}
}
}
if (N != 0)
printf("\n");
}
return 0;
}