一:题目来源:https://vjudge.net/contest/207402#problem/A
二:wa点:1.开始N老老实实的打的是80,估计运行过程爆了数组,后来改成了85过了
2.
for(j=0;j+i<len;j++)
开始这一句中我写的是j=i;发现这样会略过str[0],估计是一直wa的原因
3.格式方面:这个格式是真的坑,开始我理解的是输入之间有空行,先输入所有的字符串,输出的时候再一起输出。(为此还特地开了一个数组存对应每个字符串的周期……)结果发现格式是每组样例之间有空行,最后一组结尾没空行。
4.开始用c写交的时候提示c不能用c++的格式这样写,所以用c++又写了一次
char str[N]={0};
三:思路:
先设定周期为1,然后在确保字符串中元素个数能被周期整除的情况下,分别检测字符串中每过一个周期对应的元素是否相等。如果有不相等的,就周期加1;如果全部都相等,就跳出循环,并输出周期的值
四:题解:
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 85
using namespace std;
int main()
{
int n,i,j;
cin>>n;
while(n--)
{
char str[N]={0};//contrast字符串用于比较
int len;//numm数组用来储存每个字符串的周期
cin>>str;
len=strlen(str);
for(i=1;i<len;i++)//i为周期
{
j=0;
if(len%i==0)//字符串的周期必须能整除
{
for(j=0;j+i<len;j++)
{
if(str[j]!=str[j+i])
break;
}
}
if(j+i==len)
break;
}
if(n!=0)
cout<<i<<endl<<endl;
else
cout<<i<<endl;
}
return 0;
}