1 /* 2 *如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。 3 *输入一个长度不超过80的串,输出它的最小周期。 4 *样例输入:HoHoHo 5 *样例输出:2 6 */ 7 #include <stdio.h> 8 #include <string.h> 9 10 //枚举法 11 int main() 12 { 13 char word[100]; 14 scanf("%s", word); 15 int len = strlen(word); 16 for(int i = 1; i <= len; ++i) //遍历各种可能出现周期1,2,3,4...len 17 { 18 int ok = 1; //检测字符串是否具有周期性,1表示真 19 //从周期长度的下一个位置开始与前面周期子串中的字符逐个比较,若出现一个不相等字符,则这个串长到此结束(跳出内循环) 20 for(int j = i; j < len; ++j) 21 if(word[j] != word[j % i]) {ok = 0; break; } 22 if(ok) {printf("%d\n", i); break; } //找到周期立刻结束(跳出外循环) 23 } 24 return 0; 25 } 26 /*分析: 27 *1.len为字符串长度,strlen()不包括最后的空字符; 28 *2.i记录周期长度,j记录从第二个周期开始字符的位置; 29 *3.语法:临时定义变量,不属于ANSI C,扩展名保存为.cpp; 30 *4.内循环判断:例如j=4的时候j%i=0,所以word[0]必须要和word[4]相等,以此类推word[1]=word[5],word[2]=word[6]...word[j]!=word[i%j] 31 * 得出一个周期,然后执行下次循环计算下一个周期。 32 */
时间: 2024-10-25 07:47:50