-----PAT乙级1003(续)
接上篇。
本题描述不是很清楚,特别是给出的八个示例几乎是给人错觉。以为只要是前面是A后面是A中间只能是PAT,PAAT就行了,实际上并不是。
要满足:
aPbATca其中a是一样的,所以其实要满足,第一个A的数量*第二个A的数量==第三个A的数量。
正确代码如下:
#include<stdio.h> #include<string.h> int main(){ int n; char a[15][120];//整个字符组 scanf("%d",&n); int i=0; for(i=0;i<n;i++){ scanf("%s",&a[i]); } for(i=0;i<n;i++){ int j=0; int flag=0;//标志是否已经出现过PbAT int cont1=0;//计数PbAT之前的A int cont2=0;//计数pbAT之后的A
int cont3=0;
while(a[i][j]!='\0'){ if(a[i][j]!='A'&&a[i][j]!='P'){ printf("NO\n"); break; }else if(a[i][j]=='A'){ if(flag==0)cont1++; else if(flag==1)cont2++; j++; } else if(a[i][j]=='P'){ if(flag==1){ printf("NO\n"); break; } j++; while(a[i][j]=='A'){ cont3++; j++; } if(cont3==0){//中间没有A的话直接输出NO printf("NO\n"); break; } if(a[i][j]=='T'){ flag=1; j++; }else {//不符合上述的都是NO printf("NO\n"); break; } } if(flag==1&&j==strlen(a[i])){ if(cont2==cont1*cont3){ printf("YES\n"); } else{ printf("NO\n"); } } } }}
PS:这里改了好几次,逻辑上有一些问题,特别是最后那个else忘写了,PAT粗暴的不给满分,也不告诉为什么,还好有大佬相助。