原题:
A character string is said to have period k if it can be formed by concatenating one or more repetitionsof another string of length k. For example, the string ”abcabcabcabc” has period 3, since it is formedby 4 repetitions of the string ”abc”. It also has periods 6 (two repetitions of ”abcabc”) and 12 (onerepetition of ”abcabcabcabc”).
Write a program to read a character string and determine its smallest period.
Input
The first line oif the input file will contain a single integer N indicating how many test case that yourprogram will test followed by a blank line. Each test case will contain a single character string of upto 80 non-blank characters. Two consecutive input will separated by a blank line.OutputAn integer denoting the smallest period of the input string for each input. Two consecutive output areseparated by a blank line.
Output
An integer denoting the smallest period of the input string for each input. Two consecutive output areseparated by a blank line.
Sample Input
1
HoHoHo
Sample Output
2
代码:
<span style="font-size:18px;">#include <iostream>
#include <cstring>
#define maxn 80
int doLoop(const char * s, int slen, int n){ // slen为s的长度,n为猜测的周期长度
for (int i= 0; i<n; i++) {
for (int j= 1; j<slen/n; j++) {
if(s[i]!=s[i+j*n]) return 0;
}
}
return 1; // 确实为循环周期,返回1,否则返回0
}
int main() {
char str[maxn];
int T;
int len;
int i;
scanf("%d", &T);
while (T--) {
scanf("%s", str);
len= strlen(str);
for (i= 1; i<=len; i++) {
if (len%i==0) {
if(doLoop(str, len, i)) break;
}
}
if(T) printf("%d\n\n", i);
else printf("%d\n",i);
}
return 0;
}
</span>