求助C语言编程题目Co-String(答案没看明白,麻烦加注释解释一下)

题目如下:
如果一个长度为2n的字符串(a1,a2,a3,⋯,a2n),满足ai=ai+n,i=1,2,⋯,n,我们称这样的字符串为"co-string"。
现在给你一个只含英文小写字母的字符串,请找出其最长的"co-string"子串的长度。

输入
第一行是一个整数K(K≤100),表示样例的个数。
每个样例占一行是一个长度不超过1000的字符串,全是小写英文字母。

输出
依次,每行输出一个样例的结果,如果不存在"co-string"子串,输出0。

样例输入
2
abbab
aaaabbbbbb
样例输出
2
6
线索
第一个样例,只有co-string子串"bb",所以长度是2。
第二个样例,最长的co-string子串是"bbbbbb",所以长度是6。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int k;scanf("%d",&k);
while(k--)
{
char p[1002];
int len,i,j,n,max=0,a=0;
scanf("%s",p);
len=strlen(p);
for(n=1;n<=len/2;n++)
{
for(i=0;i<len;i++)
{
a=1;
for(j=i;j<i+n;j++)
{
if(p[j]!=p[n+j])
{
a=0;
break;
}
}
if(a){
max=n;
}
}

}
printf("%d\n",2*max);
}
return 0;
}
麻烦给代码写下注释解释一下,真的没看明白T﹏T,感激不尽!!!

#include<stdio.h>
#include<string.h>
int main()
{
int k;//声明
scanf("%d",&k);//要输入的字符串的个数
while(k--)//循环到字符串个数符合要求才结束
{
char p[1002];//声明字符数组
int len,i,j,n,max=0,a=0;//声明
scanf("%s",p);//请输入字符串
len=strlen(p);//len等于字符串长度
for(n=1;n<=len/2;n++)//最外层循环
{
for(i=0;i<len;i++)//2层循环
{
a=1;//这是一个开关或者是非判断
for(j=i;j<i+n;j++)//最内层循环
{
if(p[j]!=p[n+j])//找子串,先看有没有n=1的,如果有再找看有没有n=2的,以此类推
{
a=0;//a=0表示不符合跳过去
break; //跳过去
}
}
if(a){//a==1表示找到啦
max=n;//记录n的值
}
}

}
printf("%d\n",2*max);//乘以2就是最大的n,程序这里和前面还是没有安排好,如果n=1,3,5,7的时候程序有bug,不能正确显示
}
return 0;
}追问

学长你好,首先谢谢你的解答

不过我还是不太懂这段代码的思路(其实就是不知道为什么要这样做)

for(n=1;n<=len/2;n++)//最外层循环
{
for(i=0;i<len;i++)//2层循环
{
a=1;//这是一个开关或者是非判断
for(j=i;j<i+n;j++)//最内层循环
{
if(p[j]!=p[n+j])//找子串,先看有没有n=1的,如果有再找看有没有n=2的,以此类推
{
a=0;//a=0表示不符合跳过去
break; //跳过去
}
}
if(a){//a==1表示找到啦
max=n;//记录n的值
}
}

}
printf("%d\n",2*max);//乘以2就是最大的n

能麻烦说下思路嘛。。。

追答

#include
#include
int main()
{
int k;//声明
scanf("%d",&k);//要输入的字符串的个数
while(k--)//循环到字符串个数符合要求才结束
{
char p[1002];//声明字符数组
int len,i,j,n,max=0,a=0,ok=0;//声明
scanf("%s",p);//请输入字符串
len=strlen(p);//len等于字符串长度
for(n=len;n>=1;n--)//最外层循环
{
if(max) break;
for(i=0;i<=len-n;i++)//2层循环
{
a=1;//这是一个开关或者是非判断
for(j=i+1;j<i+n;j++)//最内层循环
{ok=1;//进入循环标志
if(p[j]!=p[i])//先找最长子串,
{

a=0;//a=0表示不符合跳过去
ok=0;
continue; //跳过去

}
}
if(a&&ok){//a==1表示找到啦
max=n;//记录n的值
}
}
}
printf("%d\n",max);
}
return 0;
}
这个是我的改进程序,你先运行看看有问题反馈!

追问

这个后面看不到了

。。。

T﹏T

温馨提示:答案为网友推荐,仅供参考