PAT乙级1003问题

问题如下:

img

我的代码:

#include <stdio.h>

int main(){
    int i;
    scanf("%d",&i);
    char s[101];
    for(;i>0;i--){
        
        scanf("%s",&s);
        int check=0;
        int p=0;
        if(s[check]=='A'){
            check++;
            if(s[check]!='A'){
                p=1;
            }
            while(s[check]=='A'){
                check++;
            };
            if(s[check]!='P'){
                p=1;
            }
            check++;
            if(s[check]!='A'){
                p=1;
            }
            while(s[check]=='A'){
                check++;
            };
            if(s[check]!='T'){
                p=1; 
            }
            check++;
            while(s[check]!='\0'){
                if(s[check]!='A'){
                p=1;
                }
                check++;
            }
            if(p==1) printf("NO");
            if(p==0) printf("YES");
            if(i!=1) printf("\n");
            }
            
    else if(s[check]!='A'){
            if(s[check]!='P'){
                p=1;
            }
            check++;
            if(s[check]!='A'){
                p=1;
            }
            while(s[check]=='A'){
                check++;
            };
            if(s[check]!='T'){
                p=1; 
            }
            check++;
            while(s[check]!='\0'){
                if(s[check]!='A'){
                p=1;
                }
                check++;
            }
            if(p==1) printf("NO");
            if(p==0) printf("YES");
            if(i!=1) printf("\n");
            }
    }
    return 0;
}

测试结果如下:

img

请问下我最后一个测试点错误出在哪里?

我大概用状态转移表写了一个
问题的核心是:在形如 aPbTc的串中,存在关系a*b==c,即a中A的数量乘上b中A的数量应等于c中A的数量(b>0)
我的AC代码如下

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a = 0;
    scanf("%d", &a);
    char buffer[101];
    for (int i = 0; i < a; i++)
    {
        scanf("%s", buffer);
        int status = 0;
        int pre = 0, mid = 0, after = 0;
        for (int j = 0; buffer[j] != '\0'; j++)
        {
            if (buffer[j] == 'A')
            {
                if (status == 0)
                    pre++;
                else if (status == 1 || status == 2)
                {
                    mid++;
                    status = 2;
                }
                else if (status == 3)
                    after++;
            }

            else if (buffer[j] == 'P' && status == 0)
                status = 1;
            else if (buffer[j] == 'T' && status == 2)
                status = 3;
            else
            {
                status = 0;
                break;
            }
        }
        if (status == 3)
        {
            if (after == pre * mid)
                printf("YES\n");
            else
                printf("NO\n");
        }

        else
            printf("NO\n");
    }

    return 0;
}

有帮助望采纳~

#include <stdio.h>

// Verifies the string has the pattern of A*PA+TA*.
int verify(char *s)
{
        if (*s == '\0')
                return 0;
        // Match A*
        while (*s && *s == 'A')
                s++;
        // Match P
        if (*s && *s == 'P')
        {
                // Match A
                s++;
                if (*s && *s == 'A')
                {
                        while (*s && *s == 'A')
                                s++;
                        // Match T
                        if (*s && *s == 'T')
                        {
                                s++;
                                // Match A*
                                while (*s && *s == 'A')
                                        s++;
                                return *s == '\0';
                        }
                }
        }
        return 0;
}

int main()
{
        int n;
        char s[100];
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
                scanf("%s", s);
                if (verify(s))
                        printf("YES\n");
                else
                        printf("NO\n");
        }
}