要点;
1.输入的字符串一点可以整除最小周期数
2.第一周期与第二周期所对应的字符相等
源代码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[105];
int len, i,j,t;
scanf("%d", &t);
while (t--)
{
scanf("%s", s);
n = strlen(s);
for (i = 1; i <= len; i++) //i作为周期数的范围,i从1到n中寻找最小周期数
if (len %i == 0) //先判断是否能整除i,减小运算量
{
for (j = i; j < len; j++) //如果第一周期与第二周期所对应的数不相等,break跳出循环,i++
if (s[j] != s[j%i])
break;
if (j ==len) //如果完全相等,j将等于len,这时输出i的值即为最小周期数
{
printf("%d\n", i);
if(t) printf("\n"); // 题目要求答案隔行输出
break; //用break跳出循环,达到最小这一隐含条件
}
}
}
return 0;
}
学习心得:
1.利用break跳出循环,
*若有多个循环,break只能跳出最近的那个
(最后一步也可尝试直接用return 0;跳出—-不行,while会没意义,只能输出一个,此处不能用)