字符串处理题目,基本是模拟,做这道题目换了几次算法,应了学长的那句话:“字符串题目展现技巧性”。最终是模拟+枚举做出来了。
换了几次算法,花了大量的时间,所以做字符串题目首先要想好一个比较全面保险的算法(有些字符串题目有着许多难以预见的陷阱),之后才是模拟把代码写出来,反之很容易像这次一样,之前都是瞎折腾(写到后面发现自己的算法有致命漏洞)。
也利用这道题目测试了Uva OJ的I/O格式控制。在这里,Input条件“followed by a blank line.”根据cin对象的特点可以忽略这一条件限制的,但是Input条件“Two consecutive input will separated by a blank line.”表明,在之后的每次案例输入之前必须空一行(用 if(n) cout<<endl; 实现),下面是前几次算法不正确以及之后的格式测试的情况 :'((那个时间是西班牙的时间吧)
#include <iostream>
#include <cstdio>#include <cstring>
using namespace std;
int main()
{
int n;
cin>>n;
//getchar();
while(n--)
{
//getchar();
char a[130]= {0},b[130]= {0},c[130]= {0};
cin>>a;
for(int i=1; i<=strlen(a); i++)
{
int flag=1,t=i;
strncpy(b,a,i);
for(int j=i; j<strlen(a); j+=i)
{
int k;
for(k=0; k<i; k++)
{
c[k]=a[t];
t++;
}
k=0;
if(strcmp(b,c)!=0)
{
flag=0;
break;
}
}
if(flag)
{
cout<<strlen(b)<<endl;
if (n) cout<<endl;
break;
}
}
}
return 0;
}