【题目】
如果一个字符串可以由长度为k的字符串重复多次得到,我们说该串以k为周期,例如abcabcabcabc 以3为最小周期(注意它也可以以6和12为周期)
我们输入一个不超过80的串,输出它的最小周期(字符串区分大小写)
【输入样例】
HoHoHo
【输出样例】
2
【分析】
题目中说过,字符串可能有多个周期。但因为只需要求出最小的一个,可以从小到大枚举各个周期,一旦符合条件就立即输出。判断一个周期是否合法有很多方法,举一例看看吧!
#include<stdio.h>
#include<string.h>
int main()
{
char word[100];
scanf("%s",word);
int len=strlen(word);
for(int i=1;i<=len;i++)
{
if(len%i==0)
{
int flag=1;
for(int j=i;j<len;j++)
{
if(word[j]!=word[j%i])
{
flag=0;
break;
}
if(flag>0)
{
printf("%d\n",i);
break;
}
}
}
}
return 0;
}
这个程序用到了一个新语法:临时定义变量。
例如,变量i和j只定义在循环体内,因此在循环体后无法访问到他们。在使用前才定义变量能使程序更加清晰。但需要注意的是,这个语法并不是ANSIC的。建议把程序的扩展名保存为cpp.
(至于ANSIC到底是什么,简单来说,就是美国国家标准协会对C语言发布的标准,详细可参照各位大佬介绍的 “ 什么是ANSI C标准?”)
【寄语】
不努力就会被生活给踩死。无需找什么借口,一无所有,就是拼的理由。加油!!!