PAT乙级1003我要通过 总有两个测试点没过,求解答
#include <stdio.h>
#include <string.h>
int panduan(char *p);
int sfbhqtzf(char *pt); //是否包含其他字符
int pd1(char *pt); //判断xPATx
int pd2(char *pt); //判断xPAATxx
int main(void)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
char str[101];
scanf("%s",str);
if(panduan(str)) printf("YES\n");
else printf("NO\n");
}
return 0;
}
int panduan(char *p)
{
if(sfbhqtzf(p)) //包含其他字符
{
return 0;
}else if(pd1(p)){
return 1;
}else if(pd2(p)){
return 1;
}
return 0;
}
int sfbhqtzf(char *pt) //判断是否包含其他字符 包含返回1
{
int i=0;
while(pt[i]!='\0')
{
if(pt[i]!='P' && pt[i]!='A' && pt[i]!='T')
return 1;
i++;
}
return 0;
}
int pd1(char *pt) //判断xPTAx 是返回1
{
int i=0;
int x=0;
while(pt[i]=='A')
{
i++;
x++;
}
if((2*x+3) != strlen(pt))
return 0;
char str[2*x+3];
for(int i=0;i<2*x+3;i++)
{
str[i]='A';
}
str[x]='P'; str[x+2]='T';
//if(strcmp(str,pt)==0) //判断str和pt是否相等
//return 1;
//else
//return 0;
for(int l=0;l<2*x+3;l++)
{
if(str[l] != pt[l])
return 0;
}
return 1;
}
int pd2(char *pt) //判断xPAATxx 是返回1
{
int i=0;
int x=0;
while(pt[i]=='A')
{
i++;
x++;
}
if((3*x+4) != strlen(pt))
return 0;
char str[3*x+4];
for(int i=0;i<3*x+4;i++)
{
str[i]='A';
}
str[x]='P'; str[x+3]='T';
//if(strcmp(str,pt)==0) //判断str和pt是否相等
// return 1;
//else
//return 0;
for(int l=0;l<3*x+4;l++)
{
if(str[l] != pt[l])
return 0;
}
return 1;
}



供参考:https://blog.csdn.net/weixin_45947840/article/details/105900982?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242