-----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");
        }
  }
}
  }}

-----PAT乙级1003(续)

PS:这里改了好几次,逻辑上有一些问题,特别是最后那个else忘写了,PAT粗暴的不给满分,也不告诉为什么,还好有大佬相助。